2017-07-06 22 views
0

我有這個批處理文件我不使用循環

SETLOCAL ENABLEDELAYEDEXPANSION 
SET count=1 
FOR /F "tokens=* USEBACKQ" %%F IN (`find "@ STATISTICS ON CLIENT_JE_AMT EY_ENT_DATE EY_EFF_DATE" "z_B10_VALIDATION.LOG"`) DO (
    SET var!count!=%%F 
    SET /a count=!count!+1 
) 
ECHO %var1% 
ECHO %var2% 

for /f "tokens=1 delims=:" %%i in ("%var2%") do (
set stat_line_start=%%i 
) 
echo %stat_line_start% 
set /a stat_line_end=!stat_line_start!+3 

for /L %%j in (%stat_line_start%,1,%stat_line_end%) do (
echo %%j 

set k=%%j 

set cfirst=%k:~0,1% 
set csec=%k:~1,1% 
set cthird=%k:~2,1% 

findstr /B "[%cfirst%-%cfirst%][%csec%-%csec%][%cthird%-%cthird%]:" "z_B10_VALIDATION.LOG">> z_STATS.txt 
) 
ENDLOCAL 

當我運行它,我得到的變量「K」的正確值,但其對錯誤讓我的變量的正確值,在命令提示符「cfirst」,「csec」和「cthird」變量。 樣品結果行:

set k=254 
set cfirst=~0,1 

代替

set cfirst=2 

我新上這一領域,並剛剛開始探索。希望您能夠幫助我。 預先感謝您。

+2

您已啓用延遲擴展,但您沒有使用它。您在'for'循環中設置的任何變量應該用'!variable!'而不是'%variable%'調用。 – SomethingDark

+0

哇!這實際上工作!非常感謝! – viNN0924

回答

0

CMD在解析命令時展開變量,而不是在運行時展開。由於代碼塊(即由括號括起的代碼塊 - 如多行if語句和for循環)被intetilter認爲是單個命令,因此您在塊內設置的任何變量都被設置爲默認值: 沒有。

您可以推遲這種擴張與命令setlocal enabledelayedexpansion(你已經包含在你的代碼的頂部)運行時並使用!variable!語法而不是%variable%語法。