我记得我曾经使用过一个名为的工具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上为我工作
Answers:
我认为您可能正在考虑Linux 中的哪个命令。
$ which bash
/bin/bash
我不知道Windows中的等效工具。
编辑:我只是记得有一个名为Unix Utils for Windows 的软件包,它将为您提供此功能。
I remembered that I used a tool...Now I cannot find this tool. Not sure if Windows has [it]
。
根据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变量。(只需使用“ path”命令。)确保C:\ Windows \ System32在您的路径中。那是“ where.exe”所在的位置。
您正在寻找的命令在哪里!WHERE就像UNIX shell内置的“哪个”和“定位”命令之间的交叉,因为它既适用于命令可执行文件,也适用于常规文件。
它也比这两个中的任何一个都复杂一些,尽管通常
WHERE <file>
将工作。
它与“ locate”命令的不同之处在于它不浏览整个文件系统。而是,默认行为是在两个位置查找文件:
因此,可以在不指定目录的情况下直接从命令提示符运行的任何命令都可以通过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”也可以正常工作,因为PATH变量中包含C:\ Windows \ System32。)
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
在Windows上,您可以使用免费实用程序“ 一切”搜索引擎来按全名或部分名即时搜索任何文件(如果您的硬盘使用ntfs格式化)。
嘿,我只需要发布此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
,则代码不是一味之选,这对于默认情况下未启用扩展名的用户是必需的。