ファイルの反復処理

これまでは、単純に複数の値をforコマンドのセットに指定しましたが、このように固定的な値をforコマンドに設定して反復処理するだけでは意味がありません。やはり、ディレクトリ内にある複数のファイルなどに対して処理を行いたいものです。

forコマンドのセットには、ワイルドカード文字を含めることが可能です。ワイルドカード文字を含むファイル名を指定すると、カレントディレクトリ内から一致するファイルがすべて反復処理の対象となります。たとえば、カレントディレクトリのテキストファイルに対して何らかのコマンド処理を行いたい場合は *.txt をセットに指定します。

サンプル 04

@echo off

for %%f in (*.txt) do echo %%f

pause

実行結果

サンプル04の実行結果

サンプル04は、バッチファイルを実行したカレントディレクトリにある拡張子 .txt のファイルを列挙するだけの単純なforコマンドです。セットにワイルドカード文字を含む *.txt という文字列を指定しているため、このforコマンドでは、カレントディレクトリ内にあるワイルドカードの条件に一致するファイルが処理対象となります。

このプログラムではechoコマンドでファイル名を出力しているだけですが、echoコマンドに代わってrenameコマンドを使えばファイル名の変換が可能になりますし、moveコマンドで別のディレクトリに移動させることも可能です。

サンプル 05

@echo off

for %%f in (*.txt) do (
    echo 「%%f」を「copy_%%f」という名前でコピーします
    copy %%f copy_%%f
)

pause

実行結果

サンプル05の実行結果

サンプル05は、バッチファイルを実行したディレクトリのテキストファイルをすべて複製します。サンプル 04 と同様に、forコマンドのセットにはテキストファイルに一致するワイルドカード文字付の文字列を指定しています。よって、ディレクトリ内のテキストファイルごとにcopyコマンドが実行されます。

参考:[Microsoft TechNet コマンド ライン リファレンス]