我有以下代码:使用变量 'for' 循环
@echo off
SET ITER=0
for %%i in (%*) do (
SET ITER+=1
ECHO %ITER%
)
的输出是(对于三个参数):
0
0
0
预期输出:
1
2
3
为什么我无法访问for
循环中的更新变量?
我有以下代码:使用变量 'for' 循环
@echo off
SET ITER=0
for %%i in (%*) do (
SET ITER+=1
ECHO %ITER%
)
的输出是(对于三个参数):
0
0
0
预期输出:
1
2
3
为什么我无法访问for
循环中的更新变量?
在执行语句/块之前,用百分数扩展变量。
因此,在你的情况下,在执行echo %ITER%
之前将完整块展开为常数echo 0
。
变量ITER本身在循环中正确更新。
为了避免这种情况,你可以使用延迟扩展,这就像扩展%,但只是在执行
@echo off
setlocal EnableDelayedExpansion
SET ITER=0
for %%i in (%*) do (
SET /a ITER+=1
ECHO !ITER!
)
@downvoter任何理由的时刻? :) – Jacob 2011-07-27 08:26:09
[批处理文件变量在for循环中初始化]可能的重复(https://stackoverflow.com/questions/691047/batch-file-variables-initialized-in-a-for-loop) – 2017-11-09 12:16:20