Batch file cmd文件中的%和%%之间有什么区别?
我最近在.cmd文件中包含了一行类似的内容:Batch file cmd文件中的%和%%之间有什么区别?,batch-file,cmd,Batch File,Cmd,我最近在.cmd文件中包含了一行类似的内容: for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f" 最初我只使用了%f,在命令行上运行时它可以正常工作,但在文件中运行时就不行了。当我切换到%%f时,它在文件中起作用。只是想知道区别是什么。在DOS中,您不能在命令行中使用环境变量,只能在批处理文件中使用,%符号作为分隔符。如果希望在批
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
最初我只使用了%f,在命令行上运行时它可以正常工作,但在文件中运行时就不行了。当我切换到%%f时,它在文件中起作用。只是想知道区别是什么。在DOS中,您不能在命令行中使用环境变量,只能在批处理文件中使用,
%
符号作为分隔符。如果希望在批处理文件中(例如在echo
语句中)使用文本%
符号,则需要将其加倍
这一点一直延续到Windows NT,它允许在命令行上使用环境变量,但是为了向后兼容,您仍然需要在.cmd文件中加倍您的%
符号。(更多详细说明可在中找到。)
要知道三件事:
%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
当直接从命令提示符而不是从批处理文件执行时,为什么我可以在for循环中只使用1%的符号?我知道DOS的传统,但我们现在可以使用命令行中的变量。另外,请确保变量是单个字符。如果我要发出包含%的命令,例如:for/f%%I in('git log-1--pretty=format:'%H'),请将git_COMMIT=%%iIn设置为除for循环中的%g之外,还允许%1。%%在脚本中需要,以避免歧义。“在命令行(而不是批处理脚本)上工作时,不可能存在任何批处理文件参数%1、%2等,因此不遵循上述逻辑,因此命令行上的参数只需要一个%。”请参阅。