2013-04-26 71 views
0

我有一個包含此批處理文件:如何獲得變量在for循環更新正確

@echo off 
set /a count=0 
for /F "tokens=*" %%a in (a.txt) do (
    set /a count+=1 
    echo %count% : %%a 
) 
echo %count% 

而且a.txt中包含此:

1 
2 
3 
4 
5 

預計輸出到是這個樣子:

1 : 1 
2 : 2 
3 : 3 
4 : 4 
5 : 5 
5 

而是我得到:

0 : 1 
0 : 2 
0 : 3 
0 : 4 
0 : 5 
5 

因此,大家可以看到 - 文件被正確解析,計數工作(你可以看到,%count%等於5月末),但由於某些原因,%計%0會一直呆到後循環。

如何獲得在for循環內更新的變量,以便在for循環內實際可用?

回答

1

更改此:

echo %count% : %%a 

爲了這個別人:

Call echo %%count%% : %%a 

或者使用變量擴展:

@echo off 
setlocal enabledelayedexpansion 

set /a count=0 
for /F "tokens=*" %%a in (a.txt) do (
    set /a count+=1 
    echo !count! : %%a 
) 
echo %count% 

SETLOCAL enabledelayedexpansionhttp://ss64.com/nt/delayedexpansion.html

+0

:D使用'setlocal enabledelayedexpansion'和'!'代替'%'做了訣竅。謝謝堆:D – Shadow 2013-04-26 02:08:11

+0

我可能會補充說,第一個選項(使用調用)不適合我。 – Shadow 2013-04-26 02:19:39

+0

呼叫解決方案至少在Win7上起作用。 – ElektroStudios 2013-04-26 02:22:12