where
的工具在控制台中查找任何可执行程序的位置: C:\Tmp\Where myTool.exe
C:\Program Files\MyApp\myTools.exe
....
现在找不到该工具。不确定Windows是否具有内置工具来执行该搜索?
#1 楼
根据在Windows上是否有“等同于”的StackOverflow答案,where.exe
在Windows 7和Windows Server 2003及更高版本上会执行此操作:示例
C:\> where ping
输出:
C:\Windows\System32\PING.EXE
在powershell中,请使用
where.exe
,Get-Command
(或其缩写gcm
),因为where
是Where-Object
的默认别名。 />评论
这应该被标记为正确答案,因为它可以在不安装额外软件的情况下工作
– Cookie
14-10-17在12:28
这个答案的重要部分是在powershell中,where是Where-Object的默认别名,因此您需要使用where.exe或gcm / Get-Command
–戴夫·安德森(Dave Andersen)
17年11月13日在18:03
那么powershell。如何在Powershell中实现相同目标?
–krv
18年9月15日在14:12
@krv正如@DaveAndersen提到的那样,在powershell中,您可以键入Get-Command ping(或只是gcm ping),这将为您提供完整的路径以及其他一些信息。
–山姆
19年1月9日在9:25
@stevec请阅读以上注释:在PowerShell中,您必须使用where.exe而不是where
–phuclv
20 Mar 30 '20 at 2:11
#2 楼
编辑:我应该添加,如果您不能从命令提示符下使用WHERE命令,请检查您的PATH变量。 (只需使用“ path”命令。)确保C:\ Windows \ System32在您的路径中。这就是“ where.exe”所在的位置。WHERE是您要查找的命令! WHERE就像UNIX shell内置的“哪个”和“定位”命令之间的交叉点,因为它既适用于命令可执行文件,也适用于常规文件。
它也比两者中的任何一个都要复杂。这两个,尽管一般来说,简单的
WHERE <file>
就可以使用。
它与“ locate”命令的不同之处在于它看起来并不整个文件系统。相反,默认行为是在两个位置查找文件:
当前目录。
PATH变量中的所有目录。
因此,可以在不指定目录的情况下直接从命令提示符运行的任何命令都可以通过WHERE命令找到。 (因为PATH变量列表中已经有类似的命令。)
如果只想在命令路径变量中搜索,则可以使用:
WHERE "$path:<search text>"
WHERE /R <Top Level Directory> <search text>
在PATHEXT变量中,WHERE会在不包含扩展名的情况下找到命令和任何带有扩展名的文件。所有其他文件都必须完全指定或使用通配符指定。
例如,使用文件“ 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中的扩展名之一,它成功返回了“ dxdiag.exe”的所有版本。变量。 (注意:“ 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 /?”。希望这会有所帮助!
评论
哪里哪里C:\ Windows \ System32 \ where.exe :)
–vp_arth
16 Dec 6'在15:13
@vp_arth只是在想同样的事情:)
–反向工程师
19年5月31日在13:54
#3 楼
使用dir
:cd \
dir /s /b mytool.exe
cd \
部分将您更改为驱动器的根目录,以确保搜索从层次结构的顶部开始。评论
似乎在执行命令行Windows搜索。
–甘尼什(Ganesh R.)
09年9月30日在17:18
这会对驱动器进行递归搜索,并且将永远花费时间。
– djhowell
09年9月30日在17:19
在PATH环境变量中查找ARE N'T可执行文件的唯一方法是执行此操作。他从未指定自己的路径,他说任何可执行文件。
– John T
09年9月30日在17:31
它确实找到可执行文件,但是要花一点时间。
– Michael Z
2012年9月2日在22:43
当然,这仅在您知道可执行文件的名称或名称的至少一部分时有效
–奥利弗·威廉姆斯(Oliver Williams)
16年11月17日在9:04
#4 楼
请注意,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
评论
谢谢,这适用于cmd和PowerShell
–陈定义
19年1月17日在12:12
“ whereis” whereis.bat ???;)
– Timo
20 Mar 20 '20 at 13:51
对于Powershell,请参阅我对@john t答案的评论。
– Timo
20-3-20在13:52
#5 楼
对我来说,起作用的是Get-Command chromedriver
,它返回类似
CommandType Name Version Source
----------- ---- ------- ------
Application chromedriver.exe 0.0.0.0 C:\WINDOWS\chromedriver.exe
,只需用程序替换
chromedriver
您正在寻找#6 楼
令人沮丧的是它不是作为简单命令内置的。但是,有几种解决方案,其中一种是批处理文件。
创建批处理文件( 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。#7 楼
在Windows上,您可以使用免费实用程序“一切”搜索引擎来按全名或部分名立即搜索任何文件(如果您的硬盘使用ntfs格式化)。评论
Windows和Windows搜索之间的昼夜差异。
– AnthonyVO
16 Dec 15'在15:42
#8 楼
如果您使用的是Powershell,则where
与cmd的位置完全不同。在powershell中,键入:
(Get-Command powershell.exe).Path
评论
干杯。没注意到错字。
–Donal Mee
20-04-29在13:24
#9 楼
如果您只想要其中一个,则GnuWin32项目中有一堆带有单独安装程序的unix utils。#10 楼
在PowerShell(@($env:path.split(";")) + (pwd).Path) | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }
中,您可以轻松地将其转换为Cmdlet。
另一种实现此目的的方法,如编辑建议:
/>
get-command notepad.exe | select Source
#11 楼
呵呵,我只需要发布此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
测试:
C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\ssh.EXE
如果将代码包装在
setlocal enableextensions
和endlocal
中,则代码不是一排就好,这是默认情况下未启用扩展名的用户所必需的。#12 楼
WHERE
很棒,但是很慢。我发现查询注册表的速度更快,但可靠性较差,因此我将这两个想法合并为一个函数,如下所示:app_path_func.cmd:
@ECHO OFF
CLS
FOR /F "skip=2 tokens=1,2* USEBACKQ" %%N IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%~1" /t REG_SZ /v "Path"`) DO (
IF /I "%%N" == "Path" (
SET wherepath=%%P%~1
GoTo Found
)
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe %~1`) DO (
SET wherepath=%%F
GoTo Found
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES%" %~1`) DO (
SET wherepath=%%F
GoTo Found
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES(x86)%" %~1`) DO (
SET wherepath=%%F
GoTo Found
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%WINDIR%" %~1`) DO (
SET wherepath=%%F
GoTo Found
)
:Found
SET %2=%wherepath%
:End
测试:
@ECHO OFF
CLS
CALL "app_path_func.cmd" WINWORD.EXE PROGPATH
ECHO %PROGPATH%
PAUSE
结果:
C:\Program Files (x86)\Microsoft Office\Office15\WINWORD.EXE
Press any key to continue . . .
https://www.freesoftwareservers.com/display/FREES/Find+Executable+via+Batch+-+Microsoft+Office+Example+-+WINWORD+-+Find+Microsoft+Office +路径
#13 楼
打开Powershell
并使用gcm
命令gcm [your_exe]
演示
来源:Get-Command
评论
Windows上的各种答案是否在Windows上等同于“哪个”? -堆栈溢出如果应用程序正在运行并且您需要知道其位置,请使用Process Explorer(来自Sys Internals)。
在Windows 7 Enterprise上为我工作的地方