まくまくWindowsノート
DIR コマンドでファイルやディレクトリを再帰的に検索する
2008-11-30

DIR コマンドによる列挙

カレントディレクトリ以下の index.html という名前のファイルを検索するには以下のように dir コマンドを使用します。

例: index.html というファイルを再帰的に検索

C:\> dir /b /s /a-d index.html

オプションの意味:

  • /B – 余計な情報を表示せず、ファイル名(パス)のみ表示する。
  • /S – サブディレクトリも再帰的に検索する。
  • /A-D – ディレクトリ以外(つまりファイルのみ)を検索する。

任意の拡張子を指定して検索することもできます。

例: 拡張子 .java を持つファイルを再帰的に検索

C:\> dir /b /s /a-d *.java

ディレクトリのみを検索したい場合は、/A-D オプションの代わりに /AD オプションを指定します。

例: パスに build を含むディレクトリを検索

C:\> dir /b /s /ad build

実際には、上記のようにすると、build という名前のディレクトリだけでなく、絶対パスの一部分に build というディレクトリ名を含んだディレクトリを列挙してしまいます。 例えば、以下のようなディレクトリ xxxzzz などが列挙されてしまいます。

C:\aaa\build\xxx
C:\aaa\build\yyy\zzz

ディレクトリを検索するときは、下記のようにワイルドカードを組み合わせた方がうまくいきます。

C:\> dir /b /s /ad *build

こうすれば、build という名前で終わっているディレクトリだけを列挙できます(ただし、testbuild のような、プレフィックスが付いたディレクトリも検索されてしまうので、この場合も完ぺきではありません・・・)。

C:\aaa\xxx\build
C:\bbb\yyy\build
C:\ccc\zzz\testbuild

ちなみに、ワイルドカード * は2か所に指定することもでき、ファイル名の一部に特定の文字列を含んだファイルを検索することができます。

例: ファイル名の一部に Sample を含んだ .java ファイルを検索

C:\> dir /b /s /a-d *Sample*.java

FOR コマンドによる列挙

dir コマンドの代わりに、for ループを使用しても同様のことを行えます。

例: build という名前のディレクトリを列挙する

C:\> for /r /d %a in (*build) do @echo %a
C:\aaa\xxx\build
C:\bbb\yyy\build
C:\ccc\zzz\testbuild (プレフィックスを含むものまで列挙してしまうのは dir と同様)

オプションの /r は再帰的検索、d はディレクトリ検索を表しています。

2008-11-30