コンピュータ(TIPS)

DOSコマンドTIPS for文で、usebackqを使いこなすと面白い

FOR文のおさらい。 基本的な使い方。

私はDOSコマンドの中で、一番複雑かとおもうのは、for文です。

では、基本的な使い方を。

1~10までを繰り返す

for /L %%a in (1,1,10) do (

echo %%a

)

これが基本中の基本ですね。 /L オプションは、linuxでいうところの、seqの役割をしてくれます。

ファイルを1行ずつ変数に読み込む

for /f %%a in (list.txt) do (

echo %%a

)

主にテキスト文の入ったファイルに使います。このlistに1~10までの数字が入っていれば、/L オプションと同じような事になります。

区切りの文字を指定する。

for /f “delims=,” %%a in (list.csv) do (

%%a

)

これで、区切り文字が 「,」カンマになりますので、csvファイルなどを読み込みできます。

ちなみに、この場合は、1列目を%%aの中に読み込みます。1行目を%%a 26行目を%%zに代入したい場合は、

for /f “tokens=1-26 delims=,” %%a in (list.csv) do (

%%z

)

ちなみにデフォルトの区切り文字は、空白およびタブですので、もし空白やタブのあるテキストファイルを1行として読み込みたい場合は “delims=” として、区切り文字を無しに設定しないと、途中までしか読み込めなくて、ハマります。

usebackq オプションで、更に複雑にfor文を使う

たとえば、ディレクトリにあるファイル名一覧を、for文でまわしたい時は、

dir /B *.txt>list.txt

for /f “delims=.” %%a in (list.txt) do (

echo %%a

)

とするところですが、中間ファイルを作るのが、スマートではありません。

そこで、

for /f “usebackq delims=.” %%a in (`dir /B *.txt`) do (

echo %%a

)

この例題だけだと、それほど役に立つようにおもえないかもしれませんが、意外と役に経つ時が必ず来ますので、覚えておきましょう。