如何对 Windows 文件夹中的所有文件使用 pandoc? [英] How can I use pandoc for all files in the folder in Windows?

查看:51
本文介绍了如何对 Windows 文件夹中的所有文件使用 pandoc?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆