批处理文件:如果路径包含空格,则FOR / F不起作用

问题描述

|| 这是我遇到的问题:
@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 )