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.exe
, which.exe
等不知道這些PowerShell命令。
你可以快速設置一個別名, sal which gcm
( set-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的工具:
雖然我的工具主要用於搜索各種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提供的,並且有幾個簡單的批處理腳本可以完成同樣的事情,比如這個。