2009-09-30 17:06:38 +0000 2009-09-30 17:06:38 +0000
174
174

どのようにWindowsで実行ファイルの場所を見つけるのですか?

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

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

今私はこのツールを見つけることができません。Windowsにその調査をするために作り付け用具があるかどうか確かでないか。

回答 (12)

380
380
380
2012-06-24 11:41:10 +0000

のStackOverflowの回答によると、 Is there equivalent of ‘which’ on windows? , where.exeはWindows 7とWindows Server 2003以降でこれを行います:

Example

C:\> where ping

Output:

C:\Windows\System32\PING.EXE

powershellでは、where.exeのデフォルトのエイリアスとして、Get-Command, gcm (またはその略称where)を使用します。

23
23
23
2012-09-27 01:23:30 +0000

EDIT:_付け加えるべきだった、もしあなたがコマンド・プロンプトからWHEREコマンドを使用できないならば、PATH変数をチェックしてください。(「path」コマンドを使えばいいのです。) C:\Windows\System32がパスの中にあることを確認してください。ここに “where.exe” があります。

WHERE は、お探しのコマンドです。WHEREは、UNIXシェルの組み込み “which "と "locate "コマンドの間のクロスのようなもので、コマンド実行可能ファイルと通常のファイルの両方で動作します。代わりに、デフォルトの動作では、2つの場所にあるファイルを探します:

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

だから、ディレクトリを指定せずにコマンドプロンプトから直接実行できるコマンドは、WHEREコマンドで見つかります。(なぜなら、そのようなコマンドはすでに PATH 変数のリストにあるからです。)

コマンドパス変数ののみを検索したい場合は、次のようにします:

WHERE <file>

一方、ディレクトリツリー内のファイルのすべてのコピーを検索したい場合は、次のようにします:

WHERE "$path:<search text>"

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

例えば、"dxdiag.exe "と "dxdiagn.dll "というファイルを見てみましょう。次のコマンドとその出力に注目してください:

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

これは、”.exe “がPATHEXT変数の拡張子の一つであるため、"dxdiag.exe "のすべてのバージョンを返すことに成功しています。(注: "WHERE dxdiag "は、C:\Windows\System32がPATH変数の中にあるので、同様に機能したでしょう。)

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

は、一方で、”.dll “がPATHEXTの中にないので、結果を返すのに失敗します。

WHERE /R C:\Windows dxdiagn

この場合、ワイルドカードを追加することで得られる結果を見てください:

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

これは正常に all バージョンの dxdiagn.dll を返します。これが役立つことを願っています!

10
10
10
2009-09-30 17:15:31 +0000

を使用すると、dir:

cd \
dir /s /b mytool.exe

cd を使用すると、dir`:

cd \
dir /s /b mytool.exe

の部分はドライブのルートに変更され、検索が階層の一番上から始まるようになります。

9
9
9
2014-04-07 12:52:13 +0000

PowerShell の場合は少し違うことがあることに注意してください。

3
3
3
2009-09-30 19:26:11 +0000

Windowsでは、フリーのユーティリティ Everything search engine を使用して、(ハードディスクがntfsでフォーマットされている場合)フルネームまたはパーシャルネームで任意のファイルを瞬時に検索することができます。

3
3
3
2009-09-30 18:23:36 +0000

しかし、いくつかの解決策がありますが、そのうちの一つは バッチファイル です。 bat)を次のように作成します:

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

これは、ローカルディレクトリを探し、拡張子の有無にかかわらず、ファイル名のパラメータを取り、カレントディレクトリまたはPATHから最初に一致したものを返します。

1
1
1
2015-09-21 17:59:01 +0000

PowerShell で

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

簡単に Cmdlet に変換することができます。

1
1
1
2009-09-30 17:19:01 +0000

もし、 どのが欲しいだけなら、 GnuWin32 プロジェクトには、個別のインストーラを持つUnixユーティリティの束があります。

0
0
0
2020-01-19 15:42:25 +0000

私の場合は、

Get-Command chromedriver

のようなものを返す

CommandType Name Version Source
----------- ---- ------- ------
Application chromedriver.exe 0.0.0.0 C:\WINDOWS\chromedriver.exe

単に chromedriver を探しているプログラムに置き換えてください。

0
0
0
2019-10-08 11:40:42 +0000

へー、このWindowsのワンライナーバッチファイルを貼るだけなんだけど、

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

A test:

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

A test:

&001

A test: setlocal enableextensionsendlocal でコードを巻けば、かなりのワンライナーではないけど、これはデフォルトで拡張子が有効になっていないユーザーには必須。

0
0
0
2019-12-04 17:04:50 +0000

Powershell を使用していれば、where は cmd の場所と全く別の何かです。

powershell で、タイプして下さい:

(Get-Command -powershell.exe).Path
0
0
0
2013-04-24 16:35:10 +0000

起動するためのパスが必要なだけならば、startコマンドを使った方が良いことが多いです。例えば、"start chrome.exe “を使えば、Chrom{e|ium}がインストールされている場所に関係なく、Chrom{e|ium}を起動することができます。