ファイルが見つからない? ならば「where」コマンドで検索だ【Windows 10/11】:Tech TIPS
あるはずのコマンドを実行してもエラーになる、あるいは作成したはずのファイルが見つからない、といった場合はないだろうか。このようなとき、エクスプローラーの検索機能を使うより、Windows OS標準装備の「where」コマンドで検索した方が早く解決できることがある。whereコマンドの使い方と注意点を解説する。
対象OS:Windows 8.1/10/11、Windows Server 2012/2012 R2/2016/2019/2022
コマンドプロンプトあるいはWindowsターミナルでコマンドを実行したとき、「'<入力したコマンド名>'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」というエラーが表示されて困惑したことはないだろうか?
あるいは、コマンドの実行には成功したものの、表示された結果が想定と違っていて、何か別の実行ファイルを起動したように見える、といった経験もあるかもしれない。
このような場合、どこにある実行ファイルが呼び出されたのか、ぜひとも確認したいところだ。ただ、エクスプローラーの検索機能だと非常に時間がかかったり、検索結果に表示されないこともある。
本Tech TIPSでは、こうした状況で実行ファイルの在りかを簡単に突き止められる「where」コマンドの使い方と注意点を説明する。このコマンドはWindows OSに標準装備されており、改めてインストールしなくても利用できる(Windows Vista/Windows Server 2008以降)。また、実行ファイル以外のファイルも検索できるので、その方法も紹介しよう。
なお、whereコマンドではファイルの中身を調べて検索することはできない。例えば、テキストファイル内の特定キーワードで検索するといったことはできず、パスやファイル名、拡張子でしか検索できないことを留意して読み進めていただきたい。
whereコマンドで実行ファイル(コマンド)を探すには
whereコマンドの一番簡単な使い方は、見つけたいファイル名やコマンド名だけを指定して実行することである。デフォルトではカレントフォルダと「PATH」環境変数の指す各フォルダが検索される。例えば「where notepad」とすれば、メモ帳の実行ファイル(notepad.exe)を検索して、それが存在するパスを表示する。複数存在する場合は、全て表示される。
●実行ファイル限定で検索されるかどうかは、ファイル名の指定方法による
上記の「notepad」のように拡張子を指定せず、かつワイルドカードも使わずにファイル名を指定した場合、whereコマンドは「PATHEXT」環境変数に記載されている実行ファイルの拡張子を自動的に補完して検索する。そのため、見つかるのは実行ファイルに限られる。
一方、「sample.vbs」「read.me」のように拡張子まで明示的に指定するか、「ms*」「*.e*」のようにワイルドカードを使った場合は、それに該当する全ファイルが検索されるため、実行ファイル以外も検索にヒットする。
●カレントフォルダとコマンドが検索にヒットする順番に注意
もう1つ気を付けたいのは、検索で見つかったファイルの並び順だ。whereコマンドはデフォルトで、コマンドが実行される際と同じく、まずカレントフォルダを、次に「PATH」環境変数に「<パス1>;<パス2>;……;<パスn>」と記載された各パスを順番に検索する(特定のパスを指定した場合を除く。詳細は後述)。
そのため、例えばカレントフォルダに検索対象のコマンドが存在すると、そのコマンドが真っ先に表示されるし、それ以外のフォルダでは「PATH」環境変数に記載のパスの順序に沿って表示される。
つまり、カレントフォルダ次第で検索にヒットする順番が変わり、その並び順も変わることがある点に注意してほしい。
「PATH」環境変数については、Tech TIPS「【Windows 11対応】Path環境変数を設定/編集して、独自のコマンドを実行可能にする」を参照していただきたい。
見つかったファイルのサイズと更新日時を表示するには
whereコマンドによる検索で複数の実行ファイルが見つかったとしたら、それぞれの違いを確認したいところだ。
そのような場合は「/t」オプションを付けてwhereコマンドを実行すると、見つかったファイルのパスとともに、ファイルサイズと最終更新日時も表示される。
このようにすると、見つかった各ファイルの違いが分かりやすくなる。
「PATH」以外のドライブ/フォルダで検索するには
「PATH」環境変数に記載されているパス以外でも、whereコマンドのファイル検索は可能だ。それには、「/r <パス>」というオプションをコマンドラインに加える。
このように特定のパスを指定した場合、whereコマンドは、「PATH」環境変数はもとよりカレントフォルダも検索しない(以下も同様)。
コマンド以外の普通のファイルも探せる
既にお気付きかもしれないが、whereコマンドで検索できるものは実行ファイルだけに限らない。拡張子まで明確に指定するか、あるいはワイルドカードを用いると、指定されたパターンに一致する全ファイルが表示されるので、単なるファイル検索コマンドとしても利用できる。
デフォルトではカレントフォルダのみが検索される。前述した「/r <パス>」オプションを付けると、指定されたパス以下が検索対象になる。
以下では、forコマンドを併用してC:とD:ドライブ全体で.logファイルを検索し、見つかったファイルのパスとファイルサイズ、更新日時を表示している。
Copyright© Digital Advantage Corp. All Rights Reserved.