はじめに
Windows の where コマンド、PATH から実行ファイルを探すだけだと思っていませんか?
実は where /? でヘルプを見ると、思った以上に多くのオプションがあることに気づきます。この記事では、where コマンドの全オプションを実例とともに解説します。
ヘルプを確認してみる
まず、where /? を実行してみましょう:
where /?
出力:
WHERE [/R dir] [/Q] [/F] [/T] pattern...
説明:
検索パターンに一致するファイルの場所を表示します。
パラメーター一覧:
/R 指定されたディレクトリから開始して、
一致するファイルを再帰的に検索して表示します。
/Q 一致するファイルの一覧を表示せず、
見つかった場合は終了コード 0、見つからなかった場合は
終了コード 1 で処理を終了します (Quiet モード)。
/F 一致するファイル名を二重引用符で囲んで表示します。
/T 一致するすべてのファイルのサイズ、最終更新日時、
および日付を表示します。
pattern 検索するファイル名のパターンを指定します。
ワイルドカード文字 * および ? を使用できます。
"$env:pattern" および "path:pattern" 形式も指定できます。
それぞれのオプションを詳しく見ていきましょう。
オプション一覧
/R - 再帰検索
指定したディレクトリ以下を再帰的に検索します。
# C:\Users 以下のすべての .txt ファイルを検索
where /r C:\Users *.txt
/Q - Quiet モード(静かモード)
ファイルの一覧を表示せず、終了コードのみを返します。スクリプトでの条件分岐に便利です。
- 見つかった場合:終了コード
0 - 見つからなかった場合:終了コード
1
powershellの場合:
# ファイルの存在確認に使う
where.exe /q python.exe
if ($LASTEXITCODE -eq 0) {
Write-Host "Python がインストールされています"
} else {
Write-Host "Python が見つかりません"
}
コマンドプロンプト(cmd)の場合:
where /q python.exe
if %ERRORLEVEL% equ 0 (
echo Python がインストールされています
) else (
echo Python が見つかりません
)
/F - 引用符付き出力
ファイルパスをダブルクォーテーションで囲んで出力します。スペースを含むパスを他のコマンドに渡す際に安全です。
where /f notepad.exe
出力:
"C:\Windows\System32\notepad.exe"
"C:\Windows\notepad.exe"
活用例: 結果を別のコマンドに渡す
# 見つかったファイルをすべて開く(cmd の場合)
for /f "delims=" %i in ('where /f *.txt') do notepad %i
/T - ファイル情報を表示
ファイルのサイズ、最終更新日時を一緒に表示します。
where /t notepad.exe
出力:
203776 2024/09/14 9:19:41 C:\Windows\System32\notepad.exe
203776 2024/09/14 9:19:41 C:\Windows\notepad.exe
出力形式:
<サイズ(バイト)> <日付> <時刻> <フルパス>
どのバージョンのファイルが使われているか確認したいときに便利です。
オプションの組み合わせ
オプションは組み合わせて使うことができます。
/R + /T - 再帰検索しつつファイル情報も表示
where /r . /t *.json
出力例:
1256 2024/11/20 14:30:22 C:\Projects\myapp\package.json
892 2024/11/18 10:15:33 C:\Projects\myapp\tsconfig.json
445 2024/11/15 9:42:11 C:\Projects\myapp\src\config.json
/R + /F - 再帰検索結果を引用符付きで出力
where /r "C:\Program Files" /f *.exe
スペースを含むパスでも安全に処理できます。
応用例
環境変数を使った検索
"$変数名:pattern" や "パス:pattern" 形式も指定できます。
これは PowerShell の変数展開ではなく、where.exe 独自の env:pattern 構文です。
WHERE $windir:*.*
特定のパスから検索
パス:パターン の形式で、指定したパスのみを検索対象にできます。
# C:\Windows からのみ検索
where "C:\Windows:notepad.exe"
複数のパスを指定する場合はセミコロンで区切ります:
where "C:\Windows;C:\Windows\System32:*.exe"
実践的なスクリプト例
注意(PowerShell で実行する場合)
PowerShell ではwhereはWhere-Objectのエイリアスです。
本セクションでは、外部コマンドとしてのwhere.exeを明示的に呼び出しています。
例1: ツールの存在確認(PowerShell から安全に呼び出す)
if (where.exe git.exe 2>$null) {
Write-Host "git はインストールされています"
} else {
Write-Host "git が見つかりません"
}
-
where.exeを明示的に呼び出すことで、PowerShell のエイリアス問題を回避 -
/Qを使わず、PowerShell らしい真偽判定にしている
例2: 実際に使用される実行ファイルのパスを取得
$python = where.exe python.exe 2>$null | Select-Object -First 1
if ($python) {
Write-Host "現在使用される python.exe:"
Write-Host " $python"
}
- PATH 上で最優先される実体を確認できる
- 複数インストール時の確認に有効
例3: 重複インストールの検出(PATH 汚染チェック)
$results = where.exe node.exe 2>$null
if ($results.Count -gt 1) {
Write-Warning "node.exe が複数の場所に存在します"
$results | ForEach-Object {
Write-Host " - $_"
}
}
- 開発環境トラブルの原因調査に便利
- CI 環境チェックにも流用可能
例4: プロジェクト内の設定ファイル一覧を取得(サイズ付き)
where.exe /r . /t *.json *.exe *.dat *.xml 2>$null |
ForEach-Object {
if ($_ -match '^\s*(\d+)\s+(\S+)\s+(\S+)\s+(.+)$') {
[PSCustomObject]@{
SizeBytes = [int]$Matches[1]
Size = "{0:N0} bytes" -f [int]$Matches[1]
Date = $Matches[2]
Path = $Matches[4]
}
}
} |
Out-GridView -Title "設定ファイル一覧"
-
/Tの出力を PowerShell で再加工 - 設定ファイルの棚卸しやレビュー前チェックに便利
オプション早見表
| オプション | 説明 | 主な用途 |
|---|---|---|
/R dir |
指定ディレクトリから再帰検索 | プロジェクト内のファイル探索 |
/Q |
結果を表示せず終了コードのみ返す | スクリプトでの条件分岐 |
/F |
結果を引用符で囲む | 他コマンドへのパイプ処理 |
/T |
サイズと更新日時を表示 | ファイルのバージョン確認 |
まとめ
where コマンドは単なるファイル検索ツールではなく、スクリプトでの条件分岐(/Q)やファイル情報の取得(/T)など、多彩な機能を持っています。
-
/R: 再帰検索で広範囲を探す -
/Q: スクリプトでの存在確認に -
/F: 安全なパス出力に -
/T: ファイルの詳細情報を確認
シンプルなコマンドですが、オプションを使いこなすことで日々の作業効率がぐっと上がります。ぜひ活用してみてください!
参考情報




