where
コンソールでこのような実行可能プログラムの場所を見つけるためにというツールを使用したことを思い出しました:
C:\Tmp\Where myTool.exe
C:\Program Files\MyApp\myTools.exe
....
今、私はこのツールを見つけることができません。Windowsにその検索を行うための組み込みツールがあるかどうかわかりませんか?
where
私のためにWindows 7 Enterpriseで働いていた
where
コンソールでこのような実行可能プログラムの場所を見つけるためにというツールを使用したことを思い出しました:
C:\Tmp\Where myTool.exe
C:\Program Files\MyApp\myTools.exe
....
今、私はこのツールを見つけることができません。Windowsにその検索を行うための組み込みツールがあるかどうかわかりませんか?
where
私のためにWindows 7 Enterpriseで働いていた
回答:
StackOverflowの回答によると、Windowsには「これ」に相当するものがありますか?、where.exe
Windows 7およびWindows Server 2003以降でこれを行います。
C:\> where ping
C:\Windows\System32\PING.EXE
where
ため、デフォルトの別名であるWhere-Object
ので、あなたの代わりに使用する必要があるwhere.exe
、またはgcm
/Get-Command
Get-Command ping
(または単にgcm ping
)と入力できます。これにより、他の情報とともに完全なパスが提供されます。
編集: コマンドプロンプトからWHEREコマンドを使用できない場合は、PATH変数を確認してください。(「パス」コマンドを使用するだけです。)C:\ Windows \ System32がパスにあることを確認してください。それが「where.exe」の場所です。
WHEREはあなたが探しているコマンドです!WHEREは、コマンド実行可能ファイルと通常のファイルの両方で機能するという点で、UNIXシェルのビルトイン「which」コマンドと「locate」コマンドのクロスに似ています。
また、これら2つのいずれかよりもやや複雑ですが、一般的には
WHERE <file>
動作します。
「locate」コマンドとは異なり、ファイルシステム全体を調べていません。代わりに、デフォルトの動作では、次の2つの場所でファイルを検索します。
そのため、ディレクトリを指定せずにコマンドプロンプトから直接実行できるコマンドは、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 /?」を使用してください。お役に立てれば!
where where
C:\Windows\System32\where.exe
:)
使用dir
:
cd \
dir /s /b mytool.exe
cd \
階層の最上部から検索が開始されるように、この部分はドライブのルートに変わります。
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
単純なコマンドとして組み込まれていないことを不満に思います。
ただし、いくつかのソリューションがあり、そのうちの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
。
Windowsでは、無料のユーティリティEverything検索エンジンを使用して、完全な名前または部分的な名前(ハードディスクがntfsでフォーマットされている場合)でファイルを即座に検索できます。
ええ、私はこの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 enableextensions
とendlocal
でラップする場合、1行ではありません。これらは、デフォルトで拡張機能が有効になっていないユーザーに必要です。