2016-07-07 38 views
0

我不熟悉Windows批處理腳本。 嘗試從文本文件Ignore.txt文件中獲取值,並將它們存儲爲本地變量。在Windows批處理中從for循環獲取標記值

命令文件:

@Echo off 
setlocal enabledelayedexpansion 

for /F "tokens=1,2,3" %%i in (Ignore.txt) do (
    echo. %%i 
    echo. %%j 
    echo. %%k 

    set value1=%%i 
    set value2=%%j 
    set value3=%%k 
) 

Echo. Value1: !value1! 
Echo. Value2: !value2! 
Echo. Value3: !value3! 

Endlocal 

Ignore.txt:

*.svc 
*.jpg 
*.png 

但結果只打印一個變量太錯:

輸出:

*.svc 
*.jpg 
*.png 

Value1: *.png 
Value2: 
Value3: 

請幫助我,如果我在這裏做任何錯誤。還有關於其他更好的檢索方式的建議。

+1

的'for'循環在處理一行時間,並且文件中的行只有一個標記(將被'%% i'消耗),所以'%% j'和'%% k'都是NULL。 – CristiFati

+0

@CristiFati,如果是這種情況,echo是如何正確打印值的? – sunny24365

+4

_Ignore.txt_有3行:'for'循環執行3次,每次只執行'echo。 %% i'在屏幕上產生輸出,另外兩個(因爲變量是NULL /空)被'@Echo off'抑制。 – CristiFati

回答

1

fortoken選項的幫助中包含該位:

tokens=x,y,m-n - specifies which tokens from each line are to 
       be passed to the for body for each iteration. 

換句話說,它只會把一個單一的行成多個變量。腳本的運行證明了這一點:它輸出每一行,但是在空行%% j和%% k之間輸出空行。

如果要分析此文件到不同的變量,你需要跟蹤你是哪個行手動,像這樣的東西:

@Echo off 
setlocal enabledelayedexpansion 

set _digit=1 
for /F %%i in (Ignore.txt) do (
    echo. %%i 

    set value!_digit!=%%i 
    set /a _digit=!_digit!+1 
) 

Echo. Value1: !value1! 
Echo. Value2: !value2! 
Echo. Value3: !value3! 

Endlocal