我在批处理脚本中使用 MediaInfo CLI,我不知道问题是什么,但是如果我使用包含空格的文件夹路径,我将无法使此命令起作用。我对批处理脚本并不陌生,多年来已经创建了数百个脚本。通常我会认为使用双引号可以解决问题,但我知道这与使用"for/f"命令并传递带有双引号的多个参数有关。我已经尝试了我能想到的所有方法,但如果我使用带有空格的路径,仍然无法让它工作。没有空格,它就可以工作,只是没有空格。
请注意,这不是完整的批处理脚本,只是有问题代码的一个片段。我还将双"%%"变量更改为单"%",以便更轻松地在命令行上进行测试。
此外,在我的批处理脚本中,我没有使用"echo",而是输出到变量,这就是为什么我必须使用"for"命令的原因。所有这些都与这个具体问题无关。
工作示例
for /f %g in ('C:MediaInfo.exe "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv"') do echo %g
.
for /f "usebackq delims=" %g in (`C:MediaInfo.exe "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv"`) do echo %g
.
不工作示例
for /f %g in ('"C:folder with spacesMediaInfo.exe" "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv"') do echo %g
.
for /f "usebackq delims=" %g in (`C:folder with spacesMediaInfo.exe "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv"`) do echo %g
两个"不工作"命令都会导致相同的错误...
"C:\folder"不被识别为内部或外部命令, 可操作的程序或批处理文件。
for /F
循环的集合内的命令(即do
之前的括号部分(实际上是由cmd /C
执行的,它可以根据它们的位置删除潜在的引号。 例如,在命令行中:
for /f "delims=" %g in ('"C:folder with spacesMediaInfo.exe" "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv"') do echo %g
外部的引号对被删除,留下无效的命令行:
C:folder with spacesMediaInfo.exe" "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv
如果您现在添加一对额外的引号,它将起作用。您甚至可以转义这些引号,而不必更改任何其他转义,以防:
for /f "delims=" %g in ('^""C:folder with spacesMediaInfo.exe" "--Inform=General;%MenuCount%" "D:Some Folderfilename.mkv"^"') do echo %g