windows set path variable




在Windows命令行中是否有相當於'which'的內容? (14)

由於我有時遇到了路徑問題,我的某個cmd腳本被另一個程序(路徑上的較早)隱藏(隱藏),因此我希望能夠在Windows命令行上找到程序的完整路徑,並給出只是它的名字。

有沒有相當於UNIX命令'which'?

在UNIX上, which command打印給定命令的完整路徑以輕鬆找到並修復這些影子問題。


Windows Server 2003和更高版本(即Windows XP 32位之後的任何內容)提供了執行某些功能的where.exe程序,儘管它匹配所有類型的文件,而不僅僅是可執行的命令。 (它與cd類的內置shell命令不匹配。)它甚至會接受通配符,所以where nt*查找名稱以nt開頭的%PATH%和當前目錄中的所有文件。

嘗試where /? 求助。

請注意,Windows PowerShell將where定義為Where-Object cmdlet的別名,因此如果您需要where.exe ,則需要輸入完整名稱而不是省略.exe擴展名。


GnuWin32工具和其他一些Unix工具一起使用。


來自JPSoft的TCC和TCC / LE是CMD.EXE替代品,增加了重要的功能。 與OP的問題有關, which是TCC系列命令處理器的內置命令。


在PowerShell下, get-command將在$Env:PATH任何位置查找可執行文件。

get-command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

它還通過為當前shell定義的$Env:PATHEXT等定制了powershell cmdlet,函數,別名,帶有自定義可執行文件擴展名的文件(類似於bash的type -a foo ) - 使其成為比其他工具where.exewhich.exe等不知道這些PowerShell命令。

你可以快速設置一個別名, sal which gcmset-alias which get-command縮寫形式)。


在Windows CMD which調用where

$ where php
C:\Program Files\PHP\php.exe

在Windows PowerShell中:

set-alias which where.exe

對於你的XP用戶(其中沒有內置命令),我寫了一個叫“where like”的命令,叫做whichr叫做whichr

要安裝它,請安裝ruby

然後

gem install whichr

像運行它

c:\>whichr cmd_here


從這裡獲取unxutils: http://sourceforge.net/projects/unxutils/ : http://sourceforge.net/projects/unxutils/

在Windows平台上的黃金,將所有漂亮的Unix工具放在標準的Windows DOS上。 多年來一直使用它。

它包含一個'哪個'。 請注意,它是區分大小寫的。

注意:要安裝它,將zip分解到某處並將... \ UnxUtils \ usr \ local \ wbin \添加到您的系統路徑env變量中。


感到驚訝的是,沒有人提到cygwin作為解決方案。 如果您不介意使用第三方解決方案,那麼cygwin就是要走的路。

Cygwin在Windows環境中為您提供* nix的舒適性(您可以在Windows命令外殼中使用它,或者使用您選擇的* nix外殼)。 它為Windows提供了大量的* nix命令(比如which ),並且您可以將該目錄包含在PATH


我創建了類似於Ned Batchelder的工具:

在PATH中搜索.dll和.exe文件

雖然我的工具主要用於搜索各種dll版本,但它顯示更多信息(日期,大小,版本),但它不使用PATHEXT(我希望很快更新我的工具)。


我在因特網上找不到的Unix的Win32端口都沒有,因為它們都有一個或多個缺點:

  • 不支持Windows PATHEXT變量。 (它定義了在掃描路徑之前隱式添加到每個命令的擴展名列表,以及以何種順序)。(我使用了很多tcl腳本,並且沒有公開可用的工具可以找到它們。)
  • 不支持cmd.exe代碼頁,這使得它們不正確地顯示非ascii字符的路徑。 (我對此非常敏感,ç以我的名字:-))
  • 不支持cmd.exe和PowerShell命令行中的獨特蒐索規則。 (沒有公開的工具可以在PowerShell窗口中找到.ps1腳本,但不能在cmd窗口中找到!)

所以我最終寫了我自己的,這正確地支持了上述所有內容。

在那裡可用: http://jf.larvoire.free.fr/progs/which.exe : http://jf.larvoire.free.fr/progs/which.exe


我在我的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:

此批處理文件使用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%)

set /? 求助。


沒有庫存的Windows,但是它是由Services for Unix提供的並且有幾個簡單的批處理腳本可以完成同樣的事情,比如這個。





path-variables