どのようにWindowsで実行ファイルの場所を見つけるのですか?
コンソールでこのような実行プログラムの場所を見つけるためにwhere
と呼ばれるツールを使用したことを思い出しました:
C:\Tmp\Where myTool.exe
C:\Program Files\MyApp\myTools.exe
....
今私はこのツールを見つけることができません。Windowsにその調査をするために作り付け用具があるかどうか確かでないか。
コンソールでこのような実行プログラムの場所を見つけるためにwhere
と呼ばれるツールを使用したことを思い出しました:
C:\Tmp\Where myTool.exe
C:\Program Files\MyApp\myTools.exe
....
今私はこのツールを見つけることができません。Windowsにその調査をするために作り付け用具があるかどうか確かでないか。
のStackOverflowの回答によると、 Is there equivalent of ‘which’ on windows? , where.exe
はWindows 7とWindows Server 2003以降でこれを行います:
C:\> where ping
C:\Windows\System32\PING.EXE
powershellでは、where.exe
のデフォルトのエイリアスとして、Get-Command
, gcm
(またはその略称where
)を使用します。
EDIT:_付け加えるべきだった、もしあなたがコマンド・プロンプトからWHEREコマンドを使用できないならば、PATH変数をチェックしてください。(「path」コマンドを使えばいいのです。) C:\Windows\System32がパスの中にあることを確認してください。ここに “where.exe” があります。
WHERE は、お探しのコマンドです。WHEREは、UNIXシェルの組み込み “which "と "locate "コマンドの間のクロスのようなもので、コマンド実行可能ファイルと通常のファイルの両方で動作します。代わりに、デフォルトの動作では、2つの場所にあるファイルを探します:
だから、ディレクトリを指定せずにコマンドプロンプトから直接実行できるコマンドは、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 を返します。これが役立つことを願っています!
Windowsでは、フリーのユーティリティ Everything search engine を使用して、(ハードディスクがntfsでフォーマットされている場合)フルネームまたはパーシャルネームで任意のファイルを瞬時に検索することができます。
もし、 どのが欲しいだけなら、 GnuWin32 プロジェクトには、個別のインストーラを持つUnixユーティリティの束があります。
へー、この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 enableextensions
と endlocal
でコードを巻けば、かなりのワンライナーではないけど、これはデフォルトで拡張子が有効になっていないユーザーには必須。
起動するためのパスが必要なだけならば、startコマンドを使った方が良いことが多いです。例えば、"start chrome.exe “を使えば、Chrom{e|ium}がインストールされている場所に関係なく、Chrom{e|ium}を起動することができます。