2011-08-06 12 views
18

次のコードが行ごとにどのように動作するかを誰でも正確に説明できますか?私は本当に失われています。私はFORコマンドの使い方を学んできましたが、私はこれを理解していません。FOR/fトークンのバッチファイル

@echo off 

for /f "tokens=* delims= " %%f in (myfile) do (
    set line=%%f 
    call :processToken 
) 
    goto :eof 

:processToken 

    for /f "tokens=1* delims=/" %%a in ("%line%") do (
    echo Got one token: %%a 
    set line=%%b 
) 
    if not "%line%" == "" goto :processToken 
    goto :eof 

答えて

29
for /f "tokens=* delims= " %%f in (myfile) do 

これは、先頭のスペース(おかげで、ジェブ)を除去し、ファイルのライン・バイ・ラインを読み込みます。

set line=%%f 

セット、その後ラインへline変数は、ちょうど読み、

call :procesToken 

は、上記のサブルーチンの開始であるライン

:processToken 

で何かをするサブルーチンを呼び出します。

for /f "tokens=1* delims=/" %%a in ("%line%") do 

は、/で行を分割しますが、最初のトークンの後にトークン化を停止します。

set line=%%b 

最初のトークンと

echo Got one token: %%a 

意志の出力は、ラインの残りの部分にline変数を設定します。

if not "%line%" == "" goto :processToken 

そしてline(すなわち、すべてのトークンが処理)がまだ空でない場合、それは行の残りを続行、スタートに戻ります。

+4

+1しかし、最初の 'FOR/F"トークン= * delims = "'は行の先頭のスペースをすべて削除します – jeb

+0

ありがとう、私はそれを編集しました:-) – Joey