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

Passing Multiple Arguments in a Batch FOR loop using Double Quotes?

我在批处理脚本中使用 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' is not recognized as an internal or external command, operable program or batch file.

for /F loop is actually executed by cmd /C 的集合(即 do 之前带括号的部分)中的命令,可能会根据位置删除潜在的引号。 例如,在命令行中:

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