问题

cmd文件中%和%%有什么区别?

  1. 百分号在批处理文件用来表示命令行参数:%1,%2,...
  2. 两个百分号与它们之间的任何字符都被解释为一个变量: echo %myvar%
  3. 两个百分号之间没有任何内容(在批处理文件中)被视为一个命令(不是批处理文件)中的单个百分号:%%f

为什么?

例如,如果我们执行(简化)命令行

FOR /f %f in ('dir /b .') DO somecommand %f

在批处理文件中,rule 2会尝试解释

%f in ('dir /b .') DO somecommand %

作为一个变量。为了防止这种情况发生,必须应用rule3并%用第二条rule避免使用%:

FOR /f %%f in ('dir /b .') DO somecommand %%f

在DOS中,不能在命令行上使用环境变量,只能在批处理文件中使用该%符号作为分隔符。如果想%在批处理文件中使用字面符号,例如在echo声明中,则需要将其加倍。

继承了Windows NT,允许在命令行上使用环境变量,但为了向后兼容,仍然需要将%.cmd文件中的符号加倍。