Where - DOS/コマンドプロンプト コマンド一覧
[Windows Vista?以降] パターンに一致するファイルの場所を出力します。
[PowerShell] 既定では「where」は「Where-Object」のaliasとして登録されており、「where」を使うと「where.exe」とは異なる挙動になります。このページに記載のWhereコマンドを利用したい場合は .exe を省略せず「where.exe」と入力する必要があります。
構文
where[.exe] [/F] [/Q] [/T] [/R <directory>] <patterns>...
オプション一覧
/F | ファイル名を出力する際、ダブルクオーテーション「" "」でその名前を括ります。 | ||||||
/Q | ファイル名を出力しません。バッチファイルなどで終了コードのみが欲しい場合に利用します。 | ||||||
/T | ファイル名を出力する際、ファイルサイズと最終更新日時(日付と時刻)をその手前に出力します。 | ||||||
/R <directory> |
ファイルを検索するディレクトリを指定します。このオプションを使用した場合は環境変数PATHは使用されず、指定したディレクトリおよびサブディレクトリの中からファイルを検索します。 /R オプションを用いる場合、パターン指定ではファイル名のみを指定することができます。 |
||||||
<patterns>... |
検索するファイル名のパターンを指定します。指定方法は以下の3通りあり、スペース区切りで同じパターンまたは異なるパターンを複数指定することができます。 なお、ファイルを検索する際は環境変数PATHEXTに含まれる拡張子も用いられ、これらが付加されたパターンに一致するファイルが見つかった場合それも結果に含まれます。
|
解説
Whereについて
このプログラムは、主にファイル名が環境変数PATHおよびPATHEXTによって補完される場合にどのファイルを指すかを調べる際に用いられます。Linux系における「which」と似ていますが、「常に複数のファイル名を出力する」「ワイルドカードが使用できる」という点で異なります。
なお、ファイルが見つかった場合のファイル名(/T オプションがあればそのサイズなども含む)は標準出力に、見つからなかった場合やエラーが発生した場合のメッセージは標準エラー出力に出力されます。
終了コード
Whereは以下の終了コードを返します。If Errorlevelを用いて結果に基づく分岐処理を記述することができます。
終了コード | 意味 |
---|---|
0 | ファイルが1つ以上見つかった |
1 | ファイルが1つも見つからなかった |
2 | エラーが発生した(オプションが誤っている場合など) |
※ 検索パターンが複数指定されている場合、いずれかのパターンでヒットするファイルが見つからなかった場合メッセージが出力されますが、他のパターンでファイルが見つかった場合は終了コードが 0 になります。
例
サンプル1
where /T /R D:\MyDocs yume_memo.txt
ファイル名「yume_memo.txt」に一致するファイルを「D:\MyDocs」直下および各サブディレクトリから検索し、その結果を画面に出力します。出力の際、最終更新日時などの情報も合わせて出力します。
サンプル2
where P:\Bin:conv*.exe Q:\Bin:conv*.exe 2> NUL
ファイル名パターン「conv*.exe」に一致するファイルを「P:\Bin」直下および「Q:\Bin」直下から検索します。見つからなかった場合のメッセージはリダイレクションによって非表示にしています。
サンプル3
set "MYDIRS=D:\Scripts;E:\All Data\Commands" where $MYDIRS:post_exec
ファイル名「post_exec」に一致するファイルを「D:\Scripts」直下および「E:\All Data\Commands」直下から検索します。複数のディレクトリを検索対象にするために一旦環境変数にそれらを指定しています。
サンプル4 (バッチファイル)
setlocal enabledelayedexpansion set FIND_EXE= set PATHEXT= for /f "delims=" %%F in ('where find.exe 2^> NUL') do ( if "!FIND_EXE!"=="" set "FIND_EXE=%%~fF" )
[拡張構文] 「find.exe」をカレントディレクトリおよび環境変数PATHから検索し、最初に見つかったファイルのフルパスを環境変数「FIND_EXE」にセットしています。3行目では「find.exe.exe」などがヒットしないようにPATHEXTを打ち消し、5行目では2つ以上ヒットすることに備えて最初にヒットしたファイル名のみが「FIND_EXE」にセットされるようにIfでチェックしています。なお、「( )」内で環境変数を用いるため「!」を使用しており、それを有効化するため1行目でSetlocalを実行しています。