我最近在.cmd文件中包含了与此类似的行:
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
最初,我只使用%f,并且在命令行上运行时可以正常工作,而在文件中运行时则无法正常工作。当我切换到%% f时,它在文件中起作用。只是想知道有什么区别。
Answers:
(有关更多详细信息的说明,请参见已归档的Microsoft KB文章。)
要知道的三件事:
%1
,%2
,...介于两个百分号之间的任何字符将被解释为变量:
echo %myvar%
%%f
为什么?
例如,如果我们执行您的(简体)命令行
FOR /f %f in ('dir /b .') DO somecommand %f
在批处理文件中,规则2将尝试解释
%f in ('dir /b .') DO somecommand %
作为变量。为了防止这种情况,您必须应用规则3并%
使用第二个规则来逃避规则%
:
FOR /f %%f in ('dir /b .') DO somecommand %%f