カレントディレクトリ以下の index.html という名前のファイルを検索するには以下のように dir コマンドを使用します。
C:\> dir /b /s /a-d index.html
オプションの意味:
/B – 余計な情報を表示せず、ファイル名(パス)のみ表示する。/S – サブディレクトリも再帰的に検索する。/A-D – ディレクトリ以外(つまりファイルのみ)を検索する。任意の拡張子を指定して検索することもできます。
C:\> dir /b /s /a-d *.java
ディレクトリのみを検索したい場合は、/A-D オプションの代わりに /AD オプションを指定します。
C:\> dir /b /s /ad build
実際には、上記のようにすると、build という名前のディレクトリだけでなく、絶対パスの一部分に build というディレクトリ名を含んだディレクトリを列挙してしまいます。
例えば、以下のようなディレクトリ xxx、zzz などが列挙されてしまいます。
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か所に指定することもでき、ファイル名の一部に特定の文字列を含んだファイルを検索することができます。
C:\> dir /b /s /a-d *Sample*.java
dir コマンドの代わりに、for ループを使用しても同様のことを行えます。
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 はディレクトリ検索を表しています。