我有以下代码:
@echo off
SET ITER=0
for %%i in (%*) do (
SET ITER+=1
ECHO %ITER%
)
输出是(对于三个参数):
0
0
0
预期产出:
1
2
3
为什么我无法访问for
循环中的更新变量?
答案 0 :(得分:5)
使用百分比扩展变量是在执行语句/块之前完成的
因此,在您的情况下,完整的块在echo %ITER%
执行之前被扩展为常量echo 0
变量ITER本身在循环中正确更新。
为了避免这种情况,你可以使用延迟扩展,这就像百分比扩展一样,但只是在执行时
@echo off
setlocal EnableDelayedExpansion
SET ITER=0
for %%i in (%*) do (
SET /a ITER+=1
ECHO !ITER!
)