问题描述
||
这是我遇到的问题:
@ECHO OFF
REM If this batch file is run in the same directory as \"command.exe\" then the
REM following line will work.
FOR /F \"usebackq\" %%A IN (`command.exe \"C:\\File Being Passed as a Parameter.txt\"`) DO ECHO %%A
REM The following line does not work no matter where this batch file is run.
FOR /F \"usebackq\" %%A IN (`\"C:\\Folder With Spaces\\command.exe\" \"C:\\File Being Passed as a Parameter.txt\"`) DO ECHO %%A
我想将此批处理文件存储在我想要的任何位置,而不必被迫将其存储在与command.exe相同的文件夹中。有什么建议么?
解决方法
在程序名称前添加“ 1”:
FOR /F \"usebackq\" %%A IN (`CALL \"C:\\Folder With Spaces\\command.exe\" \"C:\\File Being Passed as a Parameter.txt\"`) DO ECHO %%A
, Andriy M的call
俩很聪明而且效果很好,但是我试图在这里理解问题。
该问题是由cmd.exe
引起的,您可以在cmd /help
处阅读
....
如果有,第一个和最后一个引用将被删除
在行中不完全是两个引号。
...
因此,还有另一种解决方案,只需添加两个额外的引号
FOR /F \"usebackq=\" %%A IN (`\"\"C:\\Folder Space\\myCmd.exe\" \"Param space\"\"`) DO (
ECHO %%A
)
, 小心:
使用\'call \'(如Andriy M所示)似乎是最安全的选择。
我发现添加前导和尾随双引号(如jeb建议的可能解决方案)存在问题。
问题:
for /f \"delims=\" %%i in (\'\"\"C:\\path with spaces\\hello.bat\" \"filename with an & ampersand.jpg\"\"\') do ( echo output=%%i )
cmd.exe的输出:& was unexpected at this time.
解:
for /f \"delims=\" %%i in (\'call \"C:\\path with spaces\\hello.bat\" \"filename with an & ampersand.jpg\"\') do ( echo output=%%i )