是什么在CMD文件%和%%之间的区别?(What is the difference between

2019-07-18 16:13发布

我最近包括在.cmd文件类似这样的一行:

for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"

我原本只是用来%F,并在命令行上运行,而不是在通过文件来看,它做工精细。 当我切换到%% f时,曾在文件中。 只是想知道有什么区别。

Answer 1:

(更详细的说明中可以找到存档的Microsoft知识库文章 。)

三个事项:

  1. 百分号在批处理文件用于表示命令行参数: %1%2 ,...
  2. 在它们之间被解释为一个变量的任何字符两个百分比符号:

    echo %myvar%

  3. 没有任何之间(在一个批处理文件)两个百分比符号被当作一个命令一个百分号(不是一个批处理文件): %%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


Answer 2:

在DOS你不能在命令行中使用环境变量,只有在批处理文件中,他们使用了%符号作为分隔符。 如果你想要一个文字%在批处理文件标志,例如在echo发言,你需要加倍。

这结转到Windows NT这使得在命令行环境变量,但为了向下兼容,你仍然需要你加倍%的.cmd文件的迹象。



文章来源: What is the difference between % and %% in a cmd file?