我正在处理批处理脚本并尝试使其在包含空格的目录中工作。在特定的行中,我执行以下循环:
for /f "tokens=*" %%A in ('%~dp0fciv\fciv.exe -md5 %~dp1%FN%') do ...
如果当前目录包含空格,则循环将无法调用可执行文件。现在我把它用双引号来解决它:
for /f "tokens=*" %%A in ('"%~dp0fciv\fciv.exe" -md5 %~dp1%FN%') do ...
这个工作正常,直到参数没有空格。因此我也需要把它放在双引号中:
for /f "tokens=*" %%A in ('"%~dp0fciv\fciv.exe" -md5 "%~dp1%FN%"') do ...
但这并不像预期的那样奏效。我在cmd中直接进行了额外的测试:
for /F "tokens=* usebackq" %A in (`"c:\Test Folder\fciv\fciv.exe" -md5 "d:\Somefile"`) do echo %A
for /F "tokens=*" %A in ('"c:\Test Folder\fciv\fciv.exe" -md5 "d:\Somefile"') do echo %A
错误是:"c:\Test" not recognized as an internal or external command, operable program or batch file.
我还试图再次留下第二个双引号:
for /F "tokens=*" %A in ('"c:\Test Folder\fciv\fciv.exe" -md5 d:\Somefile') do echo %A
该命令令人惊讶地发生了应有的事情。
为什么会发生错误以及如何实现所需的功能?
答案 0 :(得分:1)
在引号中将整个命令括在引号中。
C:\Users\User>for /F "usebackq tokens=*" %A in (`""C:\Users\Use r\Desktop\Editor\UEd\UEd.exe" -md5 "d:\Somefile""`) do echo %A
如果没有参数,删除最后一个反引号可能有效。