windowsで変数にファイルの中身や実行結果を格納する方法

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