批处理文件意外行为

时间:2013-09-05 15:17:31

标签: batch-file

我有这个批处理文件:

for /L %%n in (1,1,10) do (

set a = %%n
echo %%n
echo %a%
)

当我们运行此%%n时,正确显示为1,2,3,... 10

a始终显示为10:10,10,10,...,10

是什么原因?

1 个答案:

答案 0 :(得分:2)

您需要使用延迟扩展。在FOR或IF中,变量在命令执行之前“扩展”,而不是在命令执行期间。 (expanded =变量由其值重新计算)

为了更改变量的值并在同一循环中使用它,您应该使用延迟表达式。

您必须在代码的开头写SETLOCAL ENABLEDELAYEDEXPANSION,并且应该延迟扩展的变量应该用感叹号而不是百分号来包围。

因此echo %a%成为echo !a!

修改

此外,您的set a = %%n无效,因为您影响变量“a”的n值,而不是“a”。

你必须写set a=%%n(在等于signe之前没有空格)