1

我在批处理脚本中使用 MediaInfo CLI,但我不知道问题出在哪里,但如果我使用其中包含空格的文件夹路径,我无法让此命令工作。我对批处理脚本并不陌生,多年来已经创建了数百个脚本。通常我会认为使用双引号可以解决问题,但我知道这与使用“for /f”命令和使用双引号传递多个参数有关。我已经尝试了我能想到的一切,但如果我使用带空格的路径,仍然无法让它工作。没有空格它工作得很好,只是没有空格。

请注意,这不是完整的批处理脚本,只是有问题的代码片段。我还将双“%%”变量更改为单“%”,以便在命令行上进行测试。

另外,在我的批处理脚本中,我不是使用“echo”而是输出到一个变量,这就是为什么我必须使用“for”命令。所有这些都与这个特定问题无关。

工作示例

for /f %g in ('C:\MediaInfo.exe "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"') do echo %g

.

for /f "usebackq delims=" %g in (`C:\MediaInfo.exe "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"`) do echo %g

.

不工作的例子

for /f %g in ('"C:\folder with spaces\MediaInfo.exe" "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"') do echo %g

.

for /f "usebackq delims=" %g in (`C:\folder with spaces\MediaInfo.exe "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"`) do echo %g

两个“NOT WORKING”命令都会导致相同的错误......

'C:\folder' 不是内部或外部命令、可运行程序或批处理文件。

4

1 回答 1

3

循环集合中的命令(即 之前的括号部分do)实际上是由 执行的,这可能会根据它们的位置删除潜在的引号。例如,在命令行中:for /Fcmd /C

for /f "delims=" %g in ('"C:\folder with spaces\MediaInfo.exe" "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"') do echo %g

外部的引号对被删除,留下无效的命令行:

C:\folder with spaces\MediaInfo.exe" "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv

如果您现在添加一对额外的引号,它将起作用。您甚至可以转义这些引号,而不必更改任何其他转义以防万一:

for /f "delims=" %g in ('^""C:\folder with spaces\MediaInfo.exe" "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"^"') do echo %g
于 2020-05-19T12:55:33.063 回答