FOR
コマンドに /R
オプションを指定して実行すると、指定したパスから(省略時はカレントディレクトリから)ファイルを再帰的に検索し、各ファイルに対して順に処理することができます。
C:\> FOR /R . %x IN (*.java) DO @echo %x
C:\> FOR /R . %x IN (*.java) DO @type %x
C:\> FOR /R . %x IN (*.java) DO @type %x | find /c /v ""
FOR
コマンドの /D
オプションを使用すると、ディレクトリだけを検索することができます。
下記の例では、カレントディレクトリ以下にある特定の名前を持つディレクトリをすべて削除しています。
C:\> FOR /D /R . %x IN (*build) DO @del /f /s /q %x\*.* & rd /s /q %x
ちなみに、testbuild
のような、build
で終わる名前のディレクトリもすべて削除してしまうことに注意してください。
このあたりのディレクトリ列挙の詳しい振る舞いに関しては以下を参照してください。
DIR
コマンドによるファイルの検索結果を FOR
コマンドに渡して順番に処理することもできます。
例えば、下記の例では、カレントディレクトリ以下にある、拡張子 .temp
を持つファイルを DIR コマンドを使って再帰的に検索し、見つかったファイルのパスを echo
コマンドで表示しています。
C:\> FOR /F "tokens=*" %x IN ('dir /b/s *.temp') DO @echo %x
tokens=*
という指定は、ファイル名にスペースを含んでいる場合に、FOR
コマンドが全体を 1 つのファイル名として処理するために必要です。