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

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

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


当前回答

您可以先从Downloading Git安装Git,然后打开Git Bash并键入:

which app-name

其他回答

我的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命令“WHITE”类似的可执行文件`

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\
Press any key to continue . . .

https://www.freesoftwareservers.com/display/FREES/Find+可执行文件+通过+批处理+-+Microsoft+Office+示例+-+WINWORD+-+查找+Microsoft+Office+路径

对于Windows XP用户(他们没有内置where命令),我编写了一个“where like”命令作为一个名为whicher的rubygem。

要安装它,请安装Ruby。

Then

gem install whichr

运行方式如下:

C: >其中的命令

试试这个

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

我正在使用GOW(Windows上的GNU),这是Cygwin的一个轻量级版本。你可以在这里从GitHub获取它。

GOW(Windows上的GNU)是Cygwin的轻量级替代品。它使用一个方便的Windows安装程序,可安装大约130个编译为本机win32的有用的开源UNIX应用程序二进制文件。它设计得尽可能小,大约10 MB与Cygwin相反,Cygwin可以运行超过100 MB,这取决于选项。-关于描述(Brent R.Matzelle)

GOW中包含的命令列表截图: