我有这个批处理文件:
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
是什么原因?
答案 0 :(得分:2)
您需要使用延迟扩展。在FOR或IF中,变量在命令执行之前“扩展”,而不是在命令执行期间。 (expanded =变量由其值重新计算)
为了更改变量的值并在同一循环中使用它,您应该使用延迟表达式。
您必须在代码的开头写SETLOCAL ENABLEDELAYEDEXPANSION
,并且应该延迟扩展的变量应该用感叹号而不是百分号来包围。
因此echo %a%
成为echo !a!
修改强>
此外,您的set a = %%n
无效,因为您影响变量“a”的n值,而不是“a”。
你必须写set a=%%n
(在等于signe之前没有空格)