【发布时间】:2018-11-07 05:57:10
【问题描述】:
问题
这可能只是源于对 Windows 批处理文件编码缺乏深入的了解。
我正在尝试编写一个简单的单行批处理文件,它将使用pandoc 处理目录中的每个文件,以将所有 doc 或 docx (MS Word) 文件转换为 markdown (.md) 文件。当我运行批处理文件时,出现以下错误:
pandoc: C:_ALL\_ALL\accomp\testing-accomp-2017.05\20170505.md: openBinaryFile: 不存在(没有这样的文件或目录)
对于目录中的每个文件,我都会遇到这些错误之一(大约 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 帖子:
我已经尝试过什么
基本上,在上述链接的帖子中,同一个答案大约有四种变体,我已经尝试了每一种变体。
【问题讨论】:
-
@aschipfl 感谢您的链接,我已经知道这就是为什么,您会注意到,我在文本中没有将 CMD 称为 DOS。我将问题标记为“DOS”,因为了解 DOS 的人也很可能理解 CMD,因此我不希望排除可以根据语义提供有用答案的人。
-
我明白你的意思,但我不同意,因为与 CMD 相比,DOS 命令提示符的功能非常有限(尽管我不得不承认他们有同根)。因此,将 CMD 问题标记为 DOS 对我来说似乎有点不足(这就像问一个 C++ 问题并将其标记为 C 一样)...
-
@aschipfl 我明白你的意思,这与 C++ 与 C 的类比是有道理的。假设我要实现的代码是针对 CMD 的,你能告诉我它有什么问题吗?我认为这与变量扩展有关,但每次我试图理解我都会感到困惑。
标签: batch-file cmd pandoc file-conversion