我已经在各个地方读过我可以使用Windows批处理文件for
来获取命令的输出并将其放入变量中,如下所示:
FOR /F %%G IN ('foo-command') DO SET FOO=%%G
大。因此我的foo-command
实际上是C:\Program Files\Foo\foo.bat
,并且存储在FOO_BAT
变量中。它需要一个参数bar
,其值为blah blah='foobar' blah
。所以我试试看:
FOR /F %%G IN ('%FOO_BAT% -bar "blah blah='foobar' blah"') DO SET FOO=%%G
我得到了一个可爱的'C:\Program' is not recognized...
。我无能为力,可以绕过命令中的空间。
如果要重现此内容,请创建一个仅包含以下内容的简单C:\Program Files\Foo\foo.bat
文件,然后在批处理文件中运行上面的行。
echo FooBar
如果命令的路径中有空格,我如何捕获命令的输出(带参数)作为Windows批处理变量?
%FOO_EXE%
附近加上引号。FOR
中使用该单个变量。答案 0 :(得分:4)
每当您尝试直接从FOR
循环处理输出时,我建议您添加usebackq
参数。这允许您在命令中包含引号(通常需要)以指定完整文件路径或在其中包含空格的单个参数。
例如:
REM Using the DIR command with FOR switches, extract the short name.
REM The path specified below can be fed by a variable.
FOR /F "usebackq tokens=*" %%G IN (`DIR "C:\Program Files\Foo\foo-command.exe" /B /S`) DO SET FooPathShortName=%%~sG
ECHO Short Name is: %FooPathShortName%
REM No quotes are needed to run the short name.
FOR /F "usebackq" %%G IN (`%FooPathShortName% -bar "blah blah='foobar' blah"`) DO SET Foo=%%G
在上面,我使用DIR
命令将目标可执行文件的完整路径输出为FOR
函数可以解析为文件的格式。由此我确定了文件的短名称,该名称不需要在第二个FOR
命令中执行空格。
答案 1 :(得分:2)
FOR /F "delims=" %%G IN ('CALL "C:\path with spaces\foo.bat" "blah blah='foobar' blah"') do set foo=%%G
试一试。是的,我测试了它。 Foo.bat除了回显%1之外什么都不做。