使用双引号在批处理 FOR 循环中传递多个参数?



我在批处理脚本中使用 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

最新更新