2011-06-16 229 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