2012-11-20 38 views
1

假設%Edata%是這樣寫的"A;B;C;1;2;3;"可變那麼這段代碼應該可以把它分成一堆編號的變量:爲什麼這個批處理代碼不工作?

set /a c=0 
FOR %%A IN (%Edata%) DO (
    set /a c=%c%+1 
    set var%c%=%%A 
    echo.^>^>^> Set "%%A" to "var%c%" 
) 

只有結果是變量的所有部分設置爲var0因爲%c%變量不會每次像它應該計算的那樣。有人能解釋爲什麼嗎?

回答

2

此代碼:

@echo off 
setlocal EnableDelayedExpansion 

set /a c=0 
FOR %%A IN (%Edata%) DO (
    set /a c=!c!+1 
    set var!c!=%%A 
    echo.^>^>^> Set "%%A" to "var!c!" 
) 

在你的腳本的問題是,默認情況下,變量在分析時,而不是在執行時擴大。在這種情況下,c在進入循環之前只擴展一次,這就是爲什麼它的值始終爲0,並且它永遠不會改變。

您必須啓用的變數在執行時使用此命令的擴展:

setlocal EnableDelayedExpansion 

,你必須用c!而不是for循環中的%c%。