2016-07-07 11 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によって消費される)1つのトークンしかないので、 '%% j'と' %% k'はNULLです。 – CristiFati

+0

@CristiFati、そうだとしたら、どのようにエコーが正しく値を表示していますか? – sunny24365

+4

_Ignore.txt_には3行があります: 'for'ループは3回実行され、毎回' echo。 %% i'は画面上に出力を生成し、もう1つは(変数がNULL /空であるため) '@Echo off'によって抑制されます。 – CristiFati

答えて

1

for年代のヘルプtokenオプションは、このビットが含まれています。つまり

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 
関連する問題