バッチファイルを使おう(初心者向け・forコマンド基礎編2)

「バッチのForコマンドの基本は分かるから、もう少しだけ踏み込みたい」という方がいると思います。基本的なForコマンドのバッチ処理は便利ですが、限定的でもあります。今回はForコマンドを少しだけ踏み込んで紹介します。

Forコマンドでディレクトリやサブディレクトリを扱う

Forコマンドの基本形(おさらい)

Forコマンドについて難しいと言う見解の方が多いですが、基本を押さえていれば難しいという事はありません。先にForコマンドの基本形をおさらいします。

FOR %変数 IN (セット) DO コマンド [コマンドパラメーター]

ポイントは3つですね。『%変数』は「%%a」というように、「%」を二つ記述して、その後にアルファベット一文字を記述します。『IN (セット)』はプログラム言語のfor文のインクリメントと同じイメージか、ワイルドカードを使ってファイルを操作する等です。インクリメントなら「(1,1,5)」の様に記述して、1~5まで1ステップずつインクリメントします。『コマンド』はコマンドを記述し、任意でオプションかスイッチを指定出来ます。ここまでが基本形です。

ディレクトリとサブディレクトリを扱う

基本形は理解出来たと思います。さて、コマンドプロンプトに「help for」と入力してEnterキーを押下すると、DOS先生から長いお返事を頂きます。少しずつ解説していきます。

ディレクトリのワイルドカード

セットの部分にワイルドカード(*)を指定するとファイルを走査することが可能ですが、ディレクトリの走査も可能です。DOS先生からは以下のようなお返事を頂いてます。

FOR /D %変数 IN (セット) DO コマンド [コマンド パラメーター]

/D』をForの直後に指定することで、カレントディレクトリ内のディレクトリを走査してくれます。また、『IN (セット)』にワイルドカードを指定して、カレントディレクトリ内のディレクトリ名を取得したい場合は、以下の様に記載してみて下さい。

@echo off

FOR /d %%a IN (*) DO echo %%a

pause

とても簡単なバッチですが、上記のバッチはカレントディレクトリ内のディレクトリ一覧をコマンドプロンプト上に表示してくれます。

サブディレクトリを対象にしたい

さて、カレントディレクトリだけなのかぁと落胆する人がいると思います。サブディレクトリも欲しいんですよね。私も同じ気持ちです。サブディレクトリも出来るよとDOS先生は仰ってます。

FOR /R [[ドライブ:]パス] %変数 IN (セット) DO コマンド [コマンド パラメーター]

少し分かりにくいお返事ですね。「[[ドライブ:]パス]」の部分を例えば「d\temp」にしてみます。すると、「d\temp」を起点のディレクトリにしてくれます。以下の内容のバッチを作成すると、「d\temp」の中身を走査してくれます。

@echo off
FOR /r d\temp %%a IN (*) DO echo %%a
pause

上記バッチを実行すると、サブディレクトリ内のファイルまで全て走査してコマンドプロンプト上にファイルパスを表示してくれます。ディレクトリだけ欲しい時は、「/r」の前に「/d」を指定すれば大丈夫です。「FOR /r /d」と間違って記載するとバッチがストップするので注意して下さい。

また、上記のバッチのセットの部分を「.」ピリオドにすると、ツリー形式風に表示してくれるので、ディレクトリ構成を知りたい時に利用してみて下さい。おまけですが、「FOR /r d\temp %%a IN (*) DO echo %%a >>output.log」の様に記述すると、ツリーっぽくログとして出力してくれたりします。

まとめ

Forコマンドのディレクトリを扱う方法いついて紹介しました。ディレクトリ一覧を表示したい時に、マクロを組んで頑張る方法よりも、バッチで一発で出力した方が簡単です。