由于我有时会遇到路径问题,我自己的一个cmd脚本被另一个程序隐藏(隐藏)(路径前面),所以我希望能够在Windows命令行上找到程序的完整路径,只要给出它的名称。

是否有与UNIX命令“which”等效的命令?

在UNIX上,哪个命令打印给定命令的完整路径,以便轻松查找和修复这些阴影问题。


当前回答

试试这个

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)

其他回答

如果您安装了PowerShell(我建议使用),可以使用以下命令作为大致等效命令(用programName替换可执行文件的名称):

($Env:Path).Split(";") | Get-ChildItem -filter programName*

更多信息:我的曼维奇!PowerShell哪个

我在Windows上找到的最好的版本是Joseph Newcomer的“whereis”实用程序,该实用程序可以从他的网站上获得(带有源代码)。

关于“Where is”发展的文章值得一读。

只需发布此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

如果将代码包装在setlocalenableextensions和endlocal中,那就不是一行了。

GnuWin32工具以及一系列其他Unix工具都有。

在PowerShell中,它是gcm,它提供有关其他命令的格式化信息。如果只想检索可执行文件的路径,请使用.Source。

例如:gcm-git或(gcm-git).Source

提示:

适用于Windows XP。自PowerShell 1.0之后可用。gcm是Get-Command cmdlet的别名。在没有任何参数的情况下,它列出了主机shell提供的所有可用命令。您可以使用Set alias which gcm创建自定义别名,并使用它,例如:(which git).Source。官方文件:https://technet.microsoft.com/en-us/library/ee176842.aspx