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

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

在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

其他回答

在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

我的PowerShell配置文件中有一个名为“which”的函数

function which {
    get-command $args[0]| format-list
}

输出如下:

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:

我在互联网上找到的Unix Win32端口没有一个是令人满意的,因为它们都有一个或多个缺点:

不支持Windows PATHEXT变量。(它定义了在扫描路径之前隐式添加到每个命令的扩展列表,以及顺序。)(我使用了很多tcl脚本,没有公开可用的工具可以找到它们。)不支持cmd.exe代码页,这会使它们错误地显示带有非ascii字符的路径。(我对此非常敏感,我的名字中有一个ç:-)cmd.exe和PowerShell命令行中不支持不同的搜索规则。(没有公开可用的工具可以在PowerShell窗口中找到.ps1脚本,但在cmd窗口中找不到!)

所以我最终写了我自己的,这正确地支持了以上所有内容。

此处可用:http://jf.larvoire.free.fr/progs/which.exe

此批处理文件使用CMD变量处理来查找将在路径中执行的命令。注意:当前目录总是在路径之前完成),并且根据使用的API调用,在路径之前/之后搜索其他位置。

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

参见集合/?寻求帮助。

从这里获取unxutils:http://sourceforge.net/projects/unxutils/

在windows平台上的黄金,将所有漂亮的unix实用程序放在标准的windows DOS上。多年来一直在使用它。

它包含一个“which”。注意,它是区分大小写的。

注意:要安装它,请在某个地方爆炸拉链并添加。。。\将xUtils\usr\local\wbin\解压缩到系统路径env变量。