如何在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的回答[在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.exe
,Get-Command
(或其缩写gcm
),因为where
是Where-Object
的默认别名。
我应该补充一下,如果你不能使用命令提示符中的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。希望这对你有帮助!
在WINDOWS上,你可以使用免费的工具Everything search engine来搜索instantly按全名或部分名称搜索任何文件(如果你的硬盘格式化为ntfs)。
令人沮丧的是,它没有内置一个简单的命令。
不过,有几个解决方案,其中一个是批文件的。
创建一个批处理文件(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。
呵,我只得贴出这个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 enableextensions
和endlocal
来包装代码,这两个代码是默认没有启用扩展功能的用户需要的。
如果你只需要启动它的路径,通常使用启动命令会更好。例如,你可以使用 “start chrome.exe "来启动Chrom{e|ium},不管它安装在哪里,都可以使用 "start chrome.exe "来启动。