Pandoc Windows 批处理文件构建错误路径 openBinary 文件不存在
Pandoc Windows batch file builds wrong path openBinary file does not exist
问题
这可能只是由于对 Windows 批处理文件编码缺乏深刻理解。
我正在尝试编写一个简单的单行批处理文件,它将使用 pandoc 处理目录中的每个文件,将所有 doc 或 docx (MS Word) 文件转换为 markdown (.md) 文件。当我 运行 我的批处理文件时,出现以下错误:
pandoc: C:_ALL\_ALL\accomp\testing-accomp-2017.05170505.md: openBinaryFile: does not exist (No such file or directory)
我为目录中的每个文件(大约 25,或者 )得到这些错误之一。
我 运行 命令所在的目录如下所示:
C:\_ALL\!accomp\testing-accomp-2017.05
如您所见,出于某种原因 _ALL
出现了两次。由于某种原因,它向我显示的路径不正确,我不确定这是 pandoc 问题还是 CMD 批处理文件编程问题。
我的代码
这是我的批处理文件的代码:
@echo OFF
:: [Not sure what this does, but have read that it is necessary]
setlocal enabledelayedexpansion
:: MAIN
FOR /r "." %%i IN (*.doc *.docx) DO pandoc -f rst -t markdown "%%~fi" -o "%%~dpni.md"
:: End with a pause so user can copy any text from screen.
ECHO. Done. Press any key to terminate program
PAUSE>NUL
现在,我不确定所有这些代码行的作用,据我所知,它们可能完全没有必要。然而,这里主要和最重要的代码是以 For ...
开头的代码,它的灵感来自 Stack Overflow post:
- Batch processing Pandoc conversions in Windows
我已经尝试过的
基本上,上面链接中的相同答案有大约四种变体 post,我已经尝试了每一种变体。
错误是由于目录名!accomp
.delayed expansion和感叹号!
造成的。
FOR 执行的命令行在文件 20170505.doc
执行期间扩展为:
pandoc -f rst -t markdown "C:\_ALL\!accomp\testing-accomp-2017.05170505.doc" -o "C:\_ALL\!accomp\testing-accomp-2017.05170505.md"
由于启用了延迟环境变量扩展,此命令行在执行前由 Windows 命令处理器第二次解析,搜索 !variable!
引用并将其替换为引用变量的值。
由于感叹号,字符串 !accomp\testing-accomp-2017.05170505.doc" -o "C:\_ALL\!
在这里被完全误解了。所以最后执行的是:
pandoc -f rst -t markdown "C:\_ALL\_ALL\accomp\testing-accomp-2017.05170505.md"
并且文件 C:\_ALL\_ALL\accomp\testing-accomp-2017.05170505.md
不存在。
解决方案是删除 setlocal enabledelayedexpansion
,因为这里不需要,因为在 FOR 命令行上没有使用环境变量。
@ECHO OFF
FOR /r "." %%i IN (*.doc *.docx) DO pandoc.exe -f rst -t markdown "%%i" -o "%%~dpni.md"
:: End with a pause so user can copy any text from screen.
ECHO Done. Press any key to terminate program ...
PAUSE>NUL
循环变量i
在这里已经保存了完整的限定文件名。因此 "%%~fi"
可以替换为 "%%i"
.
并且最好使用 ECHO/
而不是 ECHO.
,尽管这里既不需要 .
也不需要 /
。请参阅 DosTips 论坛主题 ECHO. FAILS to give text or blank line - Instead use ECHO/ 了解原因。
问题
这可能只是由于对 Windows 批处理文件编码缺乏深刻理解。
我正在尝试编写一个简单的单行批处理文件,它将使用 pandoc 处理目录中的每个文件,将所有 doc 或 docx (MS Word) 文件转换为 markdown (.md) 文件。当我 运行 我的批处理文件时,出现以下错误:
pandoc: C:_ALL\_ALL\accomp\testing-accomp-2017.05170505.md: openBinaryFile: does not exist (No such file or directory)
我为目录中的每个文件(大约 25,或者 )得到这些错误之一。
我 运行 命令所在的目录如下所示:
C:\_ALL\!accomp\testing-accomp-2017.05
如您所见,出于某种原因 _ALL
出现了两次。由于某种原因,它向我显示的路径不正确,我不确定这是 pandoc 问题还是 CMD 批处理文件编程问题。
我的代码
这是我的批处理文件的代码:
@echo OFF
:: [Not sure what this does, but have read that it is necessary]
setlocal enabledelayedexpansion
:: MAIN
FOR /r "." %%i IN (*.doc *.docx) DO pandoc -f rst -t markdown "%%~fi" -o "%%~dpni.md"
:: End with a pause so user can copy any text from screen.
ECHO. Done. Press any key to terminate program
PAUSE>NUL
现在,我不确定所有这些代码行的作用,据我所知,它们可能完全没有必要。然而,这里主要和最重要的代码是以 For ...
开头的代码,它的灵感来自 Stack Overflow post:
- Batch processing Pandoc conversions in Windows
我已经尝试过的
基本上,上面链接中的相同答案有大约四种变体 post,我已经尝试了每一种变体。
错误是由于目录名!accomp
.delayed expansion和感叹号!
造成的。
FOR 执行的命令行在文件 20170505.doc
执行期间扩展为:
pandoc -f rst -t markdown "C:\_ALL\!accomp\testing-accomp-2017.05170505.doc" -o "C:\_ALL\!accomp\testing-accomp-2017.05170505.md"
由于启用了延迟环境变量扩展,此命令行在执行前由 Windows 命令处理器第二次解析,搜索 !variable!
引用并将其替换为引用变量的值。
由于感叹号,字符串 !accomp\testing-accomp-2017.05170505.doc" -o "C:\_ALL\!
在这里被完全误解了。所以最后执行的是:
pandoc -f rst -t markdown "C:\_ALL\_ALL\accomp\testing-accomp-2017.05170505.md"
并且文件 C:\_ALL\_ALL\accomp\testing-accomp-2017.05170505.md
不存在。
解决方案是删除 setlocal enabledelayedexpansion
,因为这里不需要,因为在 FOR 命令行上没有使用环境变量。
@ECHO OFF
FOR /r "." %%i IN (*.doc *.docx) DO pandoc.exe -f rst -t markdown "%%i" -o "%%~dpni.md"
:: End with a pause so user can copy any text from screen.
ECHO Done. Press any key to terminate program ...
PAUSE>NUL
循环变量i
在这里已经保存了完整的限定文件名。因此 "%%~fi"
可以替换为 "%%i"
.
并且最好使用 ECHO/
而不是 ECHO.
,尽管这里既不需要 .
也不需要 /
。请参阅 DosTips 论坛主题 ECHO. FAILS to give text or blank line - Instead use ECHO/ 了解原因。