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

问题描述 投票:0回答: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'不被识别为内部或外部命令,可操作的程序或批处理文件。

windows for-loop batch-file double-quotes multiple-arguments
1个回答
0
投票

do的集合内的命令(即for /F loop之前的括号部分)实际上是由for /F执行的,这可能会删除潜在引号,具体取决于它们的位置。例如,在命令行中:

cmd /C

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

cmd /C

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

for /f "delims=" %g in ('"C:\folder with spaces\MediaInfo.exe" "--Inform=General;%MenuCount%" "D:\Some Folder\filename.mkv"') do echo %g
© www.soinside.com 2019 - 2024. All rights reserved.