引用双引号和/ f的麻烦

时间:2014-10-12 21:11:21

标签: windows batch-file double-quotes

我正在处理批处理脚本并尝试使其在包含空格的目录中工作。在特定的行中,我执行以下循环:

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

该命令令人惊讶地发生了应有的事情。

为什么会发生错误以及如何实现所需的功能?

1 个答案:

答案 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

如果没有参数,删除最后一个反引号可能有效。