題 如何在Windows中找到可執行文件的位置?


我記得我使用了一個名為as的工具 where 在控制台中查找任何可執行程序的位置:

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

現在我找不到這個工具了。不確定Windows是否有內置工具來進行搜索?


106
2017-09-30 17:06


起源


各種答案結束了 在Windows上有相同的“哪個”? - 堆棧溢出 - Satanicpuppy
如果應用程序正在運行並且您需要知道其位置,請使用Process Explorer(來自Sys Internals)。 - Ganesh R.
where 在Windows 7 Enterprise上為我工作 - Bohemian
PAGING OP:請更新接受的答案:) - Jake
@ David.Chu.ca請更新接受的答案 - Matt Frear


答案:


我想你可能在想 哪一個 Linux中的命令。

$ which bash
/bin/bash

我不知道Windows中的等效工具。

編輯: 我只記得有一個叫做的包 Unix Utils 適用於為您提供此功能的Windows。


5
2017-09-30 17:11



github.com/bmatzelle/gow/wiki 是Unix Utils的後代,使用起來更方便,在Windows上稱為Gnu。它有更多實用程序和安裝程序。 - Simon D
該死我不能貶低。 OP是正確的,有一個“where.exe”。請參閱下面的答案: superuser.com/a/440904/59929 - Piers Karsenbarg
想要在這裡投票,但問題的措辭使這成為一個有效的答案: I remembered that I used a tool...Now I cannot find this tool. Not sure if Windows has [it]。 - Ben


根據StackOverflow的回答 在Windows上有相同的“哪個”?where.exe 在Windows 7和Windows Server 2003及更高版本上執行此操作:

C:\> where ping

輸出:

C:\Windows\System32\PING.EXE

260
2018-06-24 11:41



這應該作為正確的答案,因為它可以在不安裝額外軟件的情況下工作 - Cookie
這個答案的一個重要部分是在powershell中, where 是。的默認別名 Where-Object,所以你需要使用 where.exe, 要么 gcm/Get-Command - Dave Andersen
PowerShell怎麼樣?如何在PowerShell中實現相同的目標? - krv


編輯:  我應該補充一下,如果你不能在命令提示符下使用WHERE命令,請檢查你的PATH變量。 (只需使用“path”命令。)確保C:\ Windows \ System32在您的路徑中。這就是“where.exe”所在的位置。

您正在尋找的命令在哪裡! WHERE就像UNIX shell內置的“which”和“locate”命令之間的交叉,因為它適用於命令可執行文件和常規文件。

它也比這兩者中的任何一個都複雜一些,儘管通常很簡單

WHERE <file>

將工作。

它與“locate”命令的不同之處在於它沒有查看整個文件系統。相反,默認行為是在兩個位置查找文件:

  • 當前目錄。
  • 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

它成功返回所有版本的“dxdiag.exe”,因為“。exe”是PATHEXT變量中的擴展之一。 (注意:“WHERE dxdiag”也可以使用,因為C:\ Windows \ System32在PATH變量中。)

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 /?”。希望這可以幫助!


14
2017-09-27 01:23



where where  C:\Windows\System32\where.exe :) - vp_arth


使用 dir

cd \
dir /s /b mytool.exe

cd \ part會將您更改為驅動器的根目錄,以確保從層次結構的頂部開始搜索。


8
2017-09-30 17:15



這似乎是在做命令行Windows搜索。 - Ganesh R.
這會對驅動器進行遞歸搜索,並且需要永遠。 - djhowell
查找可執行文件的唯一方法 不 在PATH環境變量中就是這樣做。他說,他從未指明過他的道路 任何執行。 - John T
它確實找到了可執行文件,但需要一段時間。 - Michael Z
這當然只有在您知道可執行文件的名稱或至少名稱的一部分時才有效 - Oliver Williams


請注意,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

4
2018-04-07 12:52





令人沮喪的是它並不是一個簡單的命令。

但是,有幾種解決方案,其中之一是 批處理文件

創建批處理文件(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


3
2017-09-30 18:23





在Windows上,您可以使用免費實用程序 一切搜索引擎 尋找 即刻 對於任何文件的完整或部分名稱(如果您的硬盤格式為ntfs)。


3
2017-09-30 19:26



這和windows搜索的日夜差異。 - AnthonyVO


如果你只是想要 哪一個的GnuWin32 project有一堆unix utils和各個安裝程序。


1
2017-09-30 17:19





在PowerShell中

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

您可以輕鬆地將其轉換為Cmdlet。


1
2017-09-21 17:59