まくまくWindowsノート
カレントディレクトリ以下のファイルやディレクトリを順に処理する
2010-04-25

FOR コマンドによるファイルやディレクトリの逐次処理

FOR コマンドに /R オプションを指定して実行すると、指定したパスから(省略時はカレントディレクトリから)ファイルを再帰的に検索し、各ファイルに対して順に処理することができます。

例: カレントディレクトリ以下の java ファイルのフルパスを列挙する

C:\> FOR /R . %x IN (*.java) DO @echo %x

例: カレントディレクトリ以下の java ファイルを出力する

C:\> FOR /R . %x IN (*.java) DO @type %x

例: カレントディレクトリ以下の java ファイルの行数を調べる

C:\> FOR /R . %x IN (*.java) DO @type %x | find /c /v ""

FOR コマンドの /D オプションを使用すると、ディレクトリだけを検索することができます。 下記の例では、カレントディレクトリ以下にある特定の名前を持つディレクトリをすべて削除しています。

例: build ディレクトリをまとめて削除する(中身もすべて削除)

C:\> FOR /D /R . %x IN (*build) DO @del /f /s /q %x\*.* & rd /s /q %x

ちなみに、testbuild のような、build で終わる名前のディレクトリもすべて削除してしまうことに注意してください。 このあたりのディレクトリ列挙の詳しい振る舞いに関しては以下を参照してください。

DIR コマンドによる見つけたファイルを FOR ループで処理する

DIR コマンドによるファイルの検索結果を FOR コマンドに渡して順番に処理することもできます。

例えば、下記の例では、カレントディレクトリ以下にある、拡張子 .temp を持つファイルを DIR コマンドを使って再帰的に検索し、見つかったファイルのパスを echo コマンドで表示しています。

C:\> FOR /F "tokens=*" %x IN ('dir /b/s *.temp') DO @echo %x

tokens=* という指定は、ファイル名にスペースを含んでいる場合に、FOR コマンドが全体を 1 つのファイル名として処理するために必要です。

2010-04-25