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的回答[在windows上有'which'的等价物吗? ],(https://stackoverflow.com/questions/304319/is-there-an-equivalent-of-which-on-windows),`where.exe`在Windows 7和Windows Server 2003及以后的Windows Server 2003上是这样做的:

例子

C:\> where ping

输出:

C:\Windows\System32\PING.EXE

在 powershell中使用where.exeGet-Command(或其缩写gcm),因为whereWhere-Object的默认别名。

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

我应该补充一下,如果你不能使用命令提示符中的WHERE命令,请检查你的PATH变量。(使用 “path "命令就可以了。)确保C:\Windows\System32在你的路径中。这就是 "where.exe "的位置。

WHERE就是你要找的命令! WHERE就像UNIX shell内置的 "which "和 "locate "命令之间的交叉,它既适用于命令可执行文件,也适用于普通文件。

–当前目录;

–PATH变量中的所有目录。因为任何类似这样的命令都已经在PATH变量列表中了)

如果你想在命令路径变量中搜索,可以使用:

WHERE <file>

如果反过来说,你想在目录树中找到一个文件的所有副本,可以使用:

WHERE "$path:<search text>"

最后,WHERE将从PATHEXT变量中找到命令和任何有扩展名的文件,而不包括扩展名。所有其他的文件都必须完全指定或使用通配符。

以文件 "dxdiag.exe "和 "dxdiagn.dll "为例。注意以下命令及其输出:

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

它成功地返回了 "dxdiag.exe "的所有版本,因为”.exe “是PATHEXT变量中的扩展名之一。(注意:"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
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。希望这对你有帮助!

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来说,有些事情可能有点不同:

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
3
3
3
2009-09-30 19:26:11 +0000

在WINDOWS上,你可以使用免费的工具Everything search engine来搜索instantly按全名或部分名称搜索任何文件(如果你的硬盘格式化为ntfs)。

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

令人沮丧的是,它没有内置一个简单的命令。

不过,有几个解决方案,其中一个是批文件的

创建一个批处理文件(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就会执行的cmd.exe。

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。

另一种方法,在编辑中建议:

get-command notepad.exe | select Source
1
1
1
2009-09-30 17:19:01 +0000

如果你只是想要哪个GnuWin32项目有一堆unix utils和单独的安装程序。

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测试:

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

不太是单行本,如果用setlocal enableextensionsendlocal来包装代码,这两个代码是默认没有启用扩展功能的用户需要的。

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

如果你在使用Powershell,where是完全不同于cmd的地方。

0
0
0
2013-04-24 16:35:10 +0000

如果你只需要启动它的路径,通常使用启动命令会更好。例如,你可以使用 “start chrome.exe "来启动Chrom{e|ium},不管它安装在哪里,都可以使用 "start chrome.exe "来启动。