for /f ["オプション文字列"] %変数 in ( 読み込みたいファイル名 ) do 実行するコマンド
オプション文字列としていろいろありますが、ここでは
tokens usebackq
を紹介します。
・tokens
について
hoge.txt 1 aaa 2 bbb
があるとします。このファイルの中身を表示することを考えます。
取り出したいフィールドに応じて、tokens
を指定します。
例えば、
・第一フィールド(1,2)のみ取り出したい
>for /f "tokens=1" %i in (hoge.txt) do ( echo %i ) または tokensを指定しないで >for /f %i in (hoge.txt) do ( echo %i ) 1 2
・第二フィールド(aaa,bbb)のみ取り出したい
>for /f "tokens=2" %i in (hoge.txt) do ( echo %i ) aaa bbb
・ファイルの中身を一行ずつ全て表示する
>for /f "tokens=*" %i in (hoge.txt) do ( echo %i ) 1 aaa 2 bbb
・usebackq
について
usebackqを使うと
in ( 読み込みたいファイル名 )
の
()
の解釈を囲み方を変えることで変更することが出来ます。 例えば、
in (`dir`) : 実行コマンドのdirとして解釈 in ('dir') : dirという文字列として解釈 in ("dir") : dirというファイル名として解釈
となります。
なので、dirというコマンドの結果を変数に格納したい!
と思ったら、
in (`dir`)
と書きます。
例えば、hoge.txtの行数をRESULTという変数に格納する場合を考えます。
hoge.txtの行数は
find /v /c "" hoge.txt
で数えることが出来ますが、実行すると、
---------- HOGE.TXT: 2
となります。
本来は数字の2
にしか欲しくないので、tokens
で数字の所だけを抽出する必要があります。
上記のことを踏まえて、行数を数えた結果を格納するスクリプトは以下のようになります。
for /f "tokens=3 usebackq" %%i in (`find /v /c "" hoge.txt`) do SET RESULT=%%i
http://tounderlinedk.blogspot.jp/2011/05/for-f-1-for1-windowsbatcmd.html