2011-06-16 218 views
3

我有以下代码:使用变量 'for' 循环

@echo off 
SET ITER=0 
for %%i in (%*) do (
    SET ITER+=1 
    ECHO %ITER% 
) 

的输出是(对于三个参数):

0 
0 
0 

预期输出:

1 
2 
3 

为什么我无法访问for循环中的更新变量?

+0

@downvoter任何理由的时刻? :) – Jacob 2011-07-27 08:26:09

+1

[批处理文件变量在for循环中初始化]可能的重复(https://stackoverflow.com/questions/691047/batch-file-variables-initialized-in-a-for-loop) – 2017-11-09 12:16:20

回答

5

在执行语句/块之前,用百分数扩展变量。
因此,在你的情况下,在执行echo %ITER%之前将完整块展开为常数echo 0
变量ITER本身在循环中正确更新。

为了避免这种情况,你可以使用延迟扩展,这就像扩展%,但只是在执行

@echo off 
setlocal EnableDelayedExpansion 
SET ITER=0 
for %%i in (%*) do (
    SET /a ITER+=1 
    ECHO !ITER! 
) 
+0

好的,这是行'SET ITER + = 1',这必须是'SET/A ...',否则它不能计算 – jeb 2011-06-16 14:22:24

+0

抱歉,/ SET缺失。谢谢! – Jacob 2011-06-16 14:24:11