我在很多地方读到可以使用 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
.
- 请尝试这个使用我提供的参数在告诉我它有效之前。参数的存在改变了一切。
每当您尝试直接处理来自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
命令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)