2013-10-01 124 views
0

我正在嘗試將.sh腳本重寫爲.bat文件,以便我可以在Windows VM上對其進行測試。for循環批處理問題

我遇到了FOR/F循環的問題,我無法使用循環中設置的變量,我對此非常沮喪。我一直在尋找一段時間,我已經啓用了延期擴張,沒有運氣。下面是一段代碼:

setlocal ENABLEDELAYEDEXPANSION 
FOR /F "eol=; tokens=1,2,3,4,5,6,7,8,9,10 delims=, " %%i in (%SOutPath%) do (

SET sKic1Length = 20 
SET sRAMTar = %%i 
SET admCode = %%j 
SET pin1Code = %%k 
SET pin2Code = %%l 
SET sKic1 = %%m 
SET sKic1Length = %%n 
SET sKid1 = %%o 
SET sKid1Length = %%p 
SET sRAMMSL=%%r 

IF sKic1Length EQU 16 SET sKic1Length=11 
IF sKic1Length EQU 32 SET sKic1Length=15 
IF sKic1Length EQU 48 SET sKic1Length=19 
::This echo outputs 'Echo is off' so variable is empty 
@echo %sKic1Length% 

) 
::Also returns same 
ECHO %sKid1Length% 

下面是我在讀迴路中的文件:

; ;, RAMTAR, ADM1, PIN1, PIN2, KIC1, KICLENGTH,KID1, KIDLENGTH, RAMMSL 
000000, 17182320, 2387, 1116, 607038CA34A91FB1, 16, 607038CA34A91FB, 16, 0200 

我將不勝感激任何輸入。

謝謝

回答

1

您必須使用!代替%的ENABLEDELAYEDEXPANSION在循環

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
for /f "eol=; tokens=1,2,3,4,5,6,7,8,9,10 delims=, " %%i in (%SOutPath%) do (
    set "sKic1Length=20" 
    set "sRAMTar=%%i" 
    set "admCode=%%j" 
    set "pin1Code=%%k" 
    set "pin2Code=%%l" 
    set "sKic1=%%m" 
    set "sKic1Length=%%n" 
    set "sKid1=%%o" 
    set "sKid1Length=%%p" 
    set "sRAMMSL=%%r" 
    if "!sKic1Length!" equ "16" set "sKic1Length=11" 
    if "!sKic1Length!" equ "32" set "sKic1Length=15" 
    if "!sKic1Length!" equ "48" set "sKic1Length=19" 
    echo.!sKic1Length! 
) 
echo.%sKid1Length% 
endlocal 

如果最後的回聲返回任何內容,那麼我想,在最後一次迭代%% p在空的。

+0

非常感謝,這解決了我的問題。 – ChrisA