2016-07-07 1 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

파일의 라인은'%% i '에 의해 소비 될 하나의 토큰 만 가지므로'%% j'와'%% k'는 NULL입니다. – CristiFati

+0

@CristiFati, 그렇다면 에코가 제대로 값을 인쇄하고 있습니다. – sunny24365

+4

_Ignore.txt_에는 3 행이 있습니다. 'for' 루프는 3 회 실행되고 매번'echo. %% i'는 화면 상에 출력을 생성하고, 다른 2 개는 (변수가 NULL/empty이기 때문에)'@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가있는 각 행 사이에 빈 줄을 출력합니다.

별도의 변수로이 파일을 구문 분석 할 경우, 당신은 당신이 이런 일에, 수동에있어 어떤 라인 추적해야합니다 :

은`for` 루프가에서 한 줄을 처리
@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