Windowsで実行可能ファイルの場所を見つけるにはどうすればよいですか?


154

whereコンソールでこのような実行可能プログラムの場所を見つけるためにというツールを使用したことを思い出しました:

 C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

今、私はこのツールを見つけることができません。Windowsにその検索を行うための組み込みツールがあるかどうかわかりませんか?



アプリケーションが実行中で、その場所を知る必要がある場合は、Process Explorer(Sys Internalsから)を使用します。
ガネーシャR.

6
where私のためにWindows 7 Enterpriseで働いていた
ボヘミアン

4
ページングOP:受け入れられた回答を更新してください:)
ジェイク

1
@ David.Chu.ca受け入れられた答えを更新してください
マットフリアー

回答:


351

StackOverflowの回答によると、Windowsには「これ」に相当するものがありますか?where.exeWindows 7およびWindows Server 2003以降でこれを行います。

C:\> where ping

出力:

C:\Windows\System32\PING.EXE

19
それは余分なソフトウェアをインストールしなくても動作しますので、これは正しい答えとしてmakredしなければならない
クッキー

25
この答えの重要な部分は、PowerShellの、ということであるwhereため、デフォルトの別名であるWhere-Objectので、あなたの代わりに使用する必要があるwhere.exe、またはgcm/Get-Command
デイヴ・アンデルセン

2
PowerShellについてはどうですか。PowerShellで同じことをどのように達成できますか?
krv

1
@krv @DaveAndersenが言及したように、PowerShellでは、Get-Command ping(または単にgcm ping)と入力できます。これにより、他の情報とともに完全なパスが提供されます。
サム

22

編集: コマンドプロンプトからWHEREコマンドを使用できない場合は、PATH変数を確認してください。(「パス」コマンドを使用するだけです。)C:\ Windows \ System32がパスにあることを確認してください。それが「where.exe」の場所です。

WHEREはあなたが探しているコマンドです!WHEREは、コマンド実行可能ファイルと通常のファイルの両方で機能するという点で、UNIXシェルのビルトイン「which」コマンドと「locate」コマンドのクロスに似ています。

また、これら2つのいずれかよりもやや複雑ですが、一般的には

WHERE <file>

動作します。

「locate」コマンドとは異なり、ファイルシステム全体を調べていません。代わりに、デフォルトの動作では、次の2つの場所でファイルを検索します。

  • 現在のディレクトリ。
  • PATH変数内のすべてのディレクトリ。

そのため、ディレクトリを指定せずにコマンドプロンプトから直接実行できるコマンドは、WHEREコマンドによって検出されます。(そのようなコマンドは既にPATH変数リストにあるため。)

コマンドパス変数でのみ検索する場合は、次を使用できます。

WHERE "$path:<search text>"

一方、ディレクトリツリーでファイルのすべてのコピーを検索する場合は、次を使用できます。

WHERE /R <Top Level Directory> <search text>

最後に、WHEREは、拡張子を含めずに、PATHEXT変数から拡張子を持つコマンドとファイルを検索します。他のすべてのファイルは、正確に指定するか、ワイルドカードを使用して指定する必要があります。

たとえば、ファイル「dxdiag.exe」および「dxdiagn.dll」を取り上げます。次のコマンドとその出力に注意してください。

WHERE /R C:\Windows dxdiag

C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe

「.exe」はPATHEXT変数の拡張子の1つであるため、「dxdiag.exe」のすべてのバージョンを返すことに成功します。(注:C:\ Windows \ System32はPATH変数にあるため、「WHERE dxdiag」も同様に機能します。)

WHERE /R C:\Windows dxdiagn

一方、「。dll」はPATHEXTにないため、結果を返すことができません

この場合、ワイルドカードを追加すると次の結果が得られます。

WHERE /R C:\Windows dxdiagn*

C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll

dxdiagn.dllのすべてのバージョンを正常に返します。

詳細については、「WHERE /?」を使用してください。お役に立てれば!


2
where where C:\Windows\System32\where.exe:)
vp_arth 16

1
@vp_arthはまったく同じことを考えていました:)
エンジニア

10

使用dir

cd \
dir /s /b mytool.exe

cd \階層の最上部から検索が開始されるように、この部分はドライブのルートに変わります。


コマンドラインのWindows Searchを実行しているようです。
ガネーシュR.

5
それはドライブの再帰的な検索を行い、永遠にかかります。
djhowell

6
PATH環境変数にない実行可能ファイルを見つける唯一の方法は、これを行うことです。彼はパスを決して指定しなかった、と彼は実行可能ファイルを言った。
ジョンT

実行可能ファイルは見つかりますが、しばらく時間がかかります。
マイケルZ

もちろん、この実行可能ファイルまたは名前の少なくとも一部の名前を知っている場合にのみ動作します
オリバー・ウィリアムズ

9

PowerShellでは、いくつかの点が少し異なる場合があることに注意してください。

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe

おかげで、これはcmdとPowerShellの両方で機能します
Ding-Yi Chen

3

単純なコマンドとして組み込まれていないことを不満に思います。

ただし、いくつかのソリューションがあり、そのうちの1つはバッチファイルです

次のようにバッチファイル(which.bat)を作成します。

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i 

これはローカルディレクトリを検索し、拡張子付きまたは拡張子なしのファイル名パラメータを取り、現在のディレクトリまたはPATHで最初に一致したものを返します。

次にwhich cmd.exe、を入力して実行すると実行されるcmd.exeを見つけるように実行しますcmd




1

PowerShellで

(@($env:path.split(";")) + (pwd).Path)  | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

これを簡単にコマンドレットに変換できます。

編集で提案されている、これを実現する別の方法:

get-command notepad.exe | select Source

0

起動するだけのパスが必要な場合は、多くの場合、startコマンドを使用することをお勧めします。たとえば、「start chrome.exe」を使用して、インストール先に関係なくChrom {e | ium}を起動できます。


0

ええ、私はこのWindowsの1つのライナーバッチファイルを投稿するだけです。

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

テスト:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\\ssh.EXE

コードをsetlocal enableextensionsendlocalでラップする場合、1行ではありません。これらは、デフォルトで拡張機能が有効になっていないユーザーに必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.