batch-file - Pandoc Windows 批处理文件构建错误路径 openBinary 文件不存在

标签 batch-file cmd pandoc file-conversion

问题

这可能只是源于对 Windows 批处理文件编码缺乏深入理解。

我正在尝试编写一个简单的单行批处理文件,它将使用 pandoc 处理目录中的每个文件。将所有 doc 或 docx (MS Word) 文件转换为 markdown (.md) 文件。当我运行我的批处理文件时,出现以下错误:

pandoc: C:_ALL\_ALL\accomp\testing-accomp-2017.05\20170505.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 帖子:

我已经尝试过的

在上面的链接帖子中,基本上有大约四种相同答案的变体,我已经尝试了每一种变体。

最佳答案

错误是由delayed expansion引起的以及目录名称 !accomp 中的感叹号 !

FOR 执行的命令行在文件 20170505.doc 执行期间扩展为:

pandoc -f rst -t markdown "C:\_ALL\!accomp\testing-accomp-2017.05\20170505.doc" -o "C:\_ALL\!accomp\testing-accomp-2017.05\20170505.md"

由于启用了延迟环境变量扩展,此命令行在执行前由 Windows 命令处理器第二次解析,搜索 !variable! 引用并将它们替换为引用变量的值。

字符串 !accomp\testing-accomp-2017.05\20170505.doc"-o "C:\_ALL\! 由于感叹号在这里被完全误解了。所以最后执行的是:

pandoc -f rst -t markdown "C:\_ALL\\_ALL\accomp\testing-accomp-2017.05\20170505.md"

并且文件 C:\_ALL\\_ALL\accomp\testing-accomp-2017.05\20170505.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/原因。

关于batch-file - Pandoc Windows 批处理文件构建错误路径 openBinary 文件不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50569769/

相关文章:

batch-file - 批处理文件 - 在 for 循环中更改变量值

html - Pandoc Markdown : ignore text in PDF (but include in HTML) Updated?

r - 在 rmarkdown html 输出中添加 X-UA-Compatible

android - 用于分割二进制文件的 Windows 命令

batch-file - 当文件已经存在时,如何在批处理文件的开头退出批处理?

windows - Git pull 无法更新本地引用

r - 当 url 在 YAML 元数据中时,如何强制 pandoc 不构建 <a> 标签

windows - 何时以及在批处理文件中的 FOR/F 和 WMIC 中转义什么

java - Taskkill 一个无标题的进程?

windows - 有关在Windows应用程序中可能替换批处理文件的问题?