連載
» 2009年04月10日 05時00分 UPDATE

Tech TIPS:Windowsのwhereコマンドでファイルを探す

whereコマンドを使うと、実行ファイルの検索や、特定のワイルドカードに一致するファイルの検索ができる。検索パスとして環境変数を指定すると、そこで定義されたパスの中から名前が一致するファイルを検索できる。

[打越浩幸,デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows Vista / Windows Server 2008



解説

 TIPS「whichコマンドを作る」では、UNIXやLinuxなどで利用できるwhichコマンド(の簡易版)を作成する方法を紹介した。whichコマンドは、引数として指定されたコマンドがどこの実行パス(環境変数PATHの指すフォルダ)に存在するかを調べて表示する。複雑なPATH環境変数を利用しているような場合に、実際にどのファイルが起動されているかを調べるのに役に立つ。

 UNIX/Linuxにはwhichと似たコマンドとして、whereisというコマンドもある。こちらは実行ファイルだけでなく、マニュアルページやソースコードなども検索対象としている。

 Windows Vista/Windows Server 2008以降のWindows OSには、whereという名前のコマンドが用意されている。これはwhichとwhereis、(UNIX/Linuxの)findなどを合わせたようなコマンドで、引数に指定された名前パターンを持つファイルを検索するためのコマンドである(ただし外部コマンドの呼び出し機能はない。ファイルを列挙するだけである)。本TIPSでは、このwhereコマンドの使い方について解説する。このコマンドは、もともとはWindows 2000のResource Kitに含まれていたものであるが、機能が拡張されており、挙動や引数など少し異なる。Windows 2003以前のOSの場合は、このResource Kit版のwhereコマンドを使うか、上記TIPSのwhichコマンド、「dir /s <ファイル名パターン>」といったコマンドを利用していただきたい(「dir /s」の意味はTIPS「dirコマンドでファイル名の一覧を取得する」参照)。

操作方法

●指定した(実行)ファイルを検索する

 whereコマンドの使い方は、「where /?」で表示される。

C:\>where /? ……ヘルプの表示

WHERE [/R ディレクトリ] [/Q] [/F] [/T] パターン...

説明:
    検索パターンに一致するファイルの場所を表示します。
    既定では、現在のディレクトリおよび PATH 環境変数によって指定された
    パス内を検索します。

パラメータ一覧:
    /R       指定したパターンに一致するファイルを、指定したディレクトリから
             開始して再帰的に検索し表示します。
……(以下省略)……



 一番簡単な使い方は、見つけたいファイル名やコマンド名を引数に指定してwhereを実行することである。デフォルトではカレントフォルダと環境変数PATHの指す各フォルダが検索対象となっているので、例えば「where notepad」とすれば、メモ帳の実行ファイル(notepad.exe)を検索して、それが存在するパスを表示する。複数存在する場合は、すべて表示されるし、ワイルドカードを使うと、該当するファイルがすべて列挙される。デフォルトでは実行ファイルの拡張子(環境変数PATHEXTに登録されている)が自動的に補われてファイルが検索されるので、結局これは実行ファイルを検索するコマンドとして利用できる(実際には最初に見つかったものが実行されることになる)。

C:\>where notepad ……メモ帳(notepad)を検索する
C:\Windows\System32\notepad.exe ……2つ見つかった
C:\Windows\notepad.exe

C:\>where *.vbs ……スクリプトコマンドを検索してみる
C:\Windows\System32\gatherWiredInfo.vbs ……3つ見つかった
C:\Windows\System32\slmgr.vbs
C:\Windows\System32\winrm.vbs

C:\>where notepad.com ……notepad.comを検索してみる
情報: 与えられたパターンのファイルが見つかりませんでした。 ……存在しなかった



●汎用のファイル検索ツールとして利用する

 whereで検索できるものは実行ファイルだけに限らない。指定されたパターンに一致するファイルがすべて表示されるので、単なるファイル検索コマンドとしても利用できる。デフォルトではカレントフォルダのみが検索対象だが、「/r <パス>」オプションを先頭に付けると、指定されたパス以下が検索対象になる。

C:\>where /r d:\work *.txt ……*.txtファイルを検索する
d:\work\utility-readme.txt
d:\work\cpuz\cpuz-readme.txt
……(以下省略)……



 「/f」オプションを付けると、結果のパス名全体が引用符で囲まれるし(空白文字を含むようなパス名の場合に有用)、「/t」オプションを付けるとファイルのサイズと最終変更日付が同時に表示される。

C:\>where /r d:\work /f *.txt ……結果を引用符で囲む
"d:\work\utility-readme.txt"
"d:\work\cpuz\cpuz-readme.txt"
……(以下省略)……

C:\>where /t /r d:\work /f *.txt ……日付を表示させる
      1215   2009/01/19      13:46:54"d:\work\utility-readme.txt"
     14957   2009/04/01      18:46:03  "d:\work\cpuz\cpuz-readme.txt"
……(以下省略)……



●パターンを使った、検索パスの複数指定

 特定の検索パスパターンを指定して、そのパスの中から(実行)ファイルだけを検索することもできる。上の「/r」オプションと似ているが、/rでは指定されたパス以下が再帰的にすべて検索されるのに対し、このパターンを使った方法では、指定されたパスだけが検索対象となる(パスは同時に複数指定可能)。また自動的にPATHEXT環境変数に基づいて拡張子が補われるので、任意の場所にある(主に)実行ファイルを検索するために利用できる。検索パスパターンとしては、「$<変数名>:<検索対象>」「<パス>:<検索対象>」が指定できる。前者は指定された環境変数に含まれるパス(複数存在する場合は「:」で区切る)から、検索対象のファイルを検索する。最初に実行した「where notepad」という例は、実は「where $path:notepad」と同じである。また例えば、「where $include:*lib.h」とすれば、環境変数INCLUDEの指している(多数の)パスの中から、*lib.hというインクルードファイルだけを検索できる。プログラマなどには便利だろう。

C:\>where notepad ……notepadを検索
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe

C:\>where $path:notepad ……PATH環境変数中のパスから検索
C:\Windows\System32\notepad.exe ……結果は同じ
C:\Windows\notepad.exe

C:\>where $include:*lib.h ……%INCLUDE%から*lib.hを検索
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdlib.h
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\CeLib.h
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\dbnetlib.h
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\perflib.h
……(以下省略)……



 自分でパスを指定する場合は、「<パス>;<パス>;……;<パス>:mycommand」のように、複数のパスを「;」で区切って並べ、最後に「:」を付けて、検索対象のファイル名を指定する。

C:\>where "d:\work;d:\document:*.txt"
d:\work\memo.txt
d:\work\a.txt
d:\work\aa.txt
……(以下省略)……



「Tech TIPS」のインデックス

Tech TIPS

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。