如何对 Windows 文件夹中的所有文件使用 pandoc? [英] How can I use pandoc for all files in the folder in Windows?
问题描述
在 pandoc.org 上的常见问题解答中有针对 Linux 和 Mac 用户的说明:
In the FAQ on pandoc.org there is the instruction for Linux and Mac users:
for f in *.txt; do pandoc "$f" -s -o "${f%.txt}.rtf"; done
但没有针对 Windows 用户的说明.
but there is no instruction for Windows users.
推荐答案
这个问题让我很沮丧,所以我写了一个批处理文件,你可以从 cmd 或 PowerShell 运行它,它会在特定类型的所有文件上调用 pandoc在文件夹/目录和所有子目录中(即,它是递归的).代码如下.将代码复制到记事本中并保存为 pancompile.bat
.从 cmd 运行最简单.在 PowerShell 中,您将其作为 .\pancompile.bat
调用.如果你不带任何参数运行命令,它会像这样吐出示例用法:
I was frustrated by this issue, so I wrote a batch file that you can run from cmd or from PowerShell that invokes pandoc on all the files of a specific type in a folder/directory, and in all subdirectories (i.e., it's recursive). The code is below. Copy the code into notepad and save it as pancompile.bat
. It's easiest to run from cmd. From PowerShell you invoke it as .\pancompile.bat
. If you run the command without any parameters, it will spit out sample usage like so:
Usage: pancompile DIRECTORY FILENAME [filemask] ["options"]
Uses pandoc to compile all documents in specified directory and subdirectories to a single output document
DIRECTORY the directory/folder to parse recursively (passed to pandoc -s);
use quotation marks if there are spaces in the directory name
FILENAME the output file (passed to pandoc -o); use quotation marks if spaces
filemask an optional file mask/filter, e.g. *.md; leave blank for all files
"options" optional list of pandoc commands (must be in quotation marks)
Minimal example: pancompile docs complete_book.docx
Typical example: pancompile "My Documents" "Complete Book.docx" *.md "-f markdown -t docx --standalone --toc"
这里是 pancompile.bat
的代码.请注意,只有当所有目录路径和文件的总字符数小于 8092 时,它才会按预期工作:
And here is the code for pancompile.bat
. Note that it will only work as expected if the total number of characters for all the directory paths and files is less than 8092:
@echo off
:: Check if user entered required options
if $%1$==$$ goto usage
if $%2$==$$ goto usage
setlocal disableDelayedExpansion
set "mask=%3"
if $%3$==$$ set "mask=*"
:: Remove quotation marks from pandoc options
set options=%4
if not $%4$==$$ set options=%options:"=%
set "files="
:: This will only work if the total characters of all the paths and filenames together is less than 8192 characters
for /r %1 %%F in (%mask%) do call set files=%%files%% "%%F"
echo/
echo The following pandoc command will be executed:
echo/
echo pandoc -s %files% -o %2 %options%
echo/
:ask
echo Would you like to run pandoc on the files listed above? (Y/N)
set INPUT=
set /P INPUT=?: %=%
if /I "%INPUT%"=="y" goto yes
if /I "%INPUT%"=="n" goto no
goto ask
:yes
pandoc -s %files% -o %2 --wrap=none %options%
echo Done
goto exit
:no
echo Command was cancelled
goto exit
:usage
echo/
if $%1$==$$ (
echo This batch file needs to be run from the command line or from PowerShell
echo/
)
echo Usage: pancompile DIRECTORY FILENAME [filemask] ["options"]
echo Uses pandoc to compile all documents in specified directory and subdirectories to a single output document
echo/
echo DIRECTORY the directory/folder to parse recursively (passed to pandoc -s);
echo use quotation marks if there are spaces in the directory name
echo FILENAME the output file (passed to pandoc -o); use quotation marks if spaces
echo filemask an optional file mask/filter, e.g. *.md; leave blank for all files
echo "options" optional list of pandoc commands (must be in quotation marks)
echo/
echo Minimal example: pancompile docs complete_book.docx
echo Typical example: pancompile "My Documents" "Complete Book.docx" *.md "-f markdown -t docx --standalone --toc"
:exit
:: End with a pause so user can read messages
echo/
echo Press any key to exit ...
pause>nul
这篇关于如何对 Windows 文件夹中的所有文件使用 pandoc?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!