Windows環境變數PATH等詳解教程

來源:互聯網
上載者:User

環境變數是在作業系統中一個具有特定名字的對象,它包含了一個或者多個應用程式所將使用到的資訊。例如Windows和DOS作業系統中的path環境變數,當要求系統運行一個程式而沒有告訴它程式所在的完整路徑時,系統除了在目前的目錄下面尋找此程式外,還應到path中指定的路徑去找。使用者通過設定環境變數,來更好的運行進程。

一、基本原理

首先看PATH環境變數。

JAVA的初學者,必須要學會配置PATH環境變數,否則無法編譯、運行JAVA程式。那麼,為什麼要配置PATH環境變數呢?PATH環境變數是做什麼的呢?我們從一個常見的問題入手。

當我們安裝好JAVA後,若沒有正確配置PATH環境變數,則在命令列視窗(開始->運行->輸入cmd,斷行符號)下運行命令java -version(顯示JAVA的版本)命令時,會出現如下的錯誤提示資訊:

這條錯誤資訊的意思是,你要求啟動並執行“java”這條命令我不認識,不知道是個什麼玩意兒。那麼究竟這個“java”命令是何方神聖呢?在JDK的安裝目錄下(我的是D:Javajdk1.6.0_24),有一個bin目錄。開啟此目錄,會發現大量的可執行檔(尾碼名為exe的檔案。Windows預設隱藏檔案尾碼名。要顯示尾碼名,可在當前視窗上方功能表列裡點“工具”菜單->檔案夾選項->查看->進階設定->清除“隱藏已知檔案類型的副檔名”前面的鉤鉤->確定)  。其中有一個可執行檔即為java.exe。現在在命令列視窗下把目前的目錄切換到這個bin目錄下。通過如下命令實現:



在此目錄下,運行dir命令,顯示目前的目錄下的所有檔案和目錄。從顯示結果中,我們可以清楚地看到“java.exe”這個檔案。如下圖所示:



實際上我們執行“java”命令,就是要運行“java.exe”這個可執行檔(我們運行其他命令,本質上也是要執行某個程式檔案)。我們現在再來執行“java -version”這條命令試試。在命令列視窗下鍵入java -version,斷行符號,結果如下圖所示:



看來這次執行成功了。命令結果顯示當前JAVA的版本是“1.6.0_24”。執行java -?可查看此命令的協助資訊。可以看到它有很多選項,-version只是其中之一。另外一種方式是,寫出這些可執行檔的完整(絕對)路徑(例如:d:Javajdk1.6.0_24binjava -version),就可以在任何目錄下執行了。讀者可自行嘗試。

與java命令類似,javac命令目前也能在bin目錄下執行,但到其他目錄下就只能寫出其完整路徑了。在學習JAVA的過程中,我們經常需要使用javac和java這兩條命令來編譯、運行我們的JAVA程式。難道我們每次運行這兩條命令都要先切換到bin目錄下嗎或寫出一長串的絕對路徑嗎?能不能有一個辦法,讓我們能夠在任何目錄下都能自如地運行這些命令呢?

解決的辦法就在於PATH環境變數。

PATH是路徑的意思,PATH環境變數中存放的值,就是一連串的路徑。不同的路徑之間,用英文的分號(;)分隔開。系統執行使用者命令時,若使用者未給出絕對路徑,則首先在目前的目錄下尋找相應的可執行檔、批次檔(另外一種可以執行的檔案)等。若找不到,再依次在PATH儲存的這些路徑中尋找相應的可執行檔程式檔案。系統就以第一次找到的為準;若搜尋完PATH儲存的所有路徑都未找到,則會顯示類似於圖一的錯誤資訊。

明白了這些,我們就把bin目錄的完整路徑添加到PATH中。在命令列視窗下,可使用set命令完成此類的任務。直接運行set,會顯示系統當前所有環境變數的值,運行set /?,會顯示關於此命令的協助資訊。使用set命令設定環境變數值的格式為:set 環境變數名=環境變數值。我們可以使用命令set path=D:Javajdk1.6.0_24bin將java等程式檔案所在的目錄添加到PATH環境變數中(Windows下環境變數名不區分大小寫,這與UNIX不同)。但是這樣會使PATH的值只有“D:Javajdk1.6.0_24bin”,它預先設定供其他程式使用的值就都被覆蓋了。因此,我們應該把值“D:Javajdk1.6.0_24bin”追加到PATH中。為此,我們可以使用如下命令:

set path=%path%;D:Javajdk1.6.0_24bin

把PATH放在兩個百分比符號之間,指把PATH原有的值取出。其後的分號表示分隔不同的路徑值,之後才是我們要添加的值。注意,請在英文IME狀態下使用此命令。現在我們轉到任意一個目錄下執行java -version命令試試。結果如下圖所示:



可見運行完全成功。

但是這種使用set命令的方式設定的環境變數只對當前命令列視窗有效。一旦關閉此視窗,再次運行另一個命令列視窗時,PATH環境變數還是原來的值。因此,我們必須在Windows下修改PATH環境變數。步驟如下:

右擊案頭“我的電腦”表徵圖->屬性->進階->環境變數,就開啟了了設定環境變數的對話方塊。上面部分是為某個使用者佈建。Windows設計為可多使用者使用一台機器,每人一個賬戶。為某個賬戶設定的變數只對該使用者有效。下面部分是設定系統變數,對系統中的每個使用者有效。現在一般電腦都只有一個使用者,即Administrator。因此只需要為此賬戶設定即可。找到PATH環境變數,點“編輯”。在“變數值”框內現有值的後面輸入英文IME的分號,然後添加你想添加的值(在這裡是D:Javajdk1.6.0_24bin)。一路確定,OK!

現在再開啟一個命令列視窗,輸入echo %path%命令查看path的值(或者直接使用path命令亦可)。現在,我們可以看到bin目錄已被添加到PATH中,再在任何目錄下運行java -version命令,均可成功。如下圖所示:



其實我們執行其他命令都是這個原理。舉例來說,當你顯示PATH的值時,你會發現第一個值是C:WINDOWSsystem32。在Windows下開啟這個目錄,你會看到很多可執行檔,它們的名字與我們常用的命令的名字是一致的。也就是說,我們執行這些命令,實際上系統就是根據PATH的這個值找到了相應的可執行檔,再運行這些檔案的結果。如attrib.exe檔案,它對應於attrib命令,這是顯示/設定檔案屬性的命令,如下圖所示:



現在我們通過命令set path=(等號右邊什麼都沒有,或隨便寫點東西)來清除PATH的值,再來運行attrib命令試試。如下圖所示:



可以看出,完全相同的命令,現在已無法執行而報錯了。

下面再通過命令set path=c:windowssystem32(Windows下不區分大小寫,因此windows與WINDOWS都正確),把attrib.exe檔案所在的路徑添加到PATH中,再運行試試。如下圖所示:



很顯然,目前已能夠正確運行。另外一個常見的例子就是format.com(.com檔案是另一種可以執行的檔案),不過此命令是用來格式化的,實驗時請小心,不要由於失誤而格式化了某個盤。而且,根據上面的描述,在PATH環境變數未正確配置的時候,寫出這些檔案的絕對路徑(完整路徑),亦可以正確執行。讀者可自行實驗(在此聲明,由於已事先提醒,因此凡是由於誤操作帶來的資料丟失,概不負責!)。

二、內部命令、外部命令和批次檔


我們現在啟動一個命令列視窗,按上述的方法把PATH的值全部清除,然後再運行dir、cd等命令。出乎我們意料的是,它們仍然能夠正確執行。這,又是什麼原因呢?

我們來看看剛才那些報告錯誤的資訊,它們都提到了“內部命令”和“外部命令”的概念。那麼什麼是內部命令和外部命令呢?

內部命令和外部命令是DOS(disk operating system,微軟早期基於命令列的作業系統)時代的概念,百度百科的解釋是:內部命令是隨每次啟動的COMMAND_COM裝入並常駐記憶體,而外部命令是一條單獨的可執行檔。粗略地講,所謂內部命令就是最核心、使用最多的命令。為了提高響應速度,系統一啟動,這些命令就被載入到記憶體,因此可以迅速、直接地執行;而外部命令由於使用相對較少,就不積極式載入到記憶體,當使用者使用時,再到硬碟上(c:windowssystem32)找相應的可執行檔,然後載入到記憶體執行。像dir、cd等都是內部命令,而諸如attrib、format等都是外部命令。儘管DOS的時代早已成為了曆史,但某些操作卻必須在命令列模式下完成,對專業人士來說更是如此。因此,Windows產品一直保留著命令列模式這個工具。

另外一個概念就是批次檔(尾碼名為.bat,來源於批量的英語單詞batch),它是另外一種可以執行的檔案。簡單地說,批次檔包含了很多DOS命令。檔案執行時,就一條一條地執行這些命令。不一定順序執行,像通用的程式設計語言一樣,它也有自己的流程式控制制。批次檔建立很簡單:用任何一個文字編輯器(如Windows的記事本)建立一個文字檔,然後把尾碼名改為.bat即可。建立好的批次檔,你也可以用文字編輯器開啟,查看它的“原始碼”。

三、關於CATALINA_HOME環境變數的設定(適用於tomcat6/7)


 Tomcat是一個免費開源的Servlet/JSP容器,深受廣大JAVA初學者喜愛。這其中需要設定CATALINA_HOME環境變數,值為tomcat安裝目錄(我的是d:tomcat7),否則會出現如下的錯誤資訊:



 這句話的意思就是沒有正確設定CATALINA_HOME環境變數,而此變數是運行Tomcat所必須的。而當你不理會這個資訊,在命令列視窗把目前的目錄切換到tomcat安裝目錄下的bin目錄下,再執行批次檔startup.bat來啟動tomcat時,發現也可以成功。難道現在不需要CATALINA_HOME環境變數了嗎?

實際上,在startup.bat中,首先判斷CATALINA_HOME是否為空白。若為空白,就把目前的目錄設為CATALINA_HOME的值。然後尋找CATALINA_HOME所指示的目錄下是否有個bin目錄,此bin目錄下是否有個叫做catalina.bat的批次檔(此檔案負責啟動tomcat)。若沒有,則把目前的目錄的父目錄設為CATALINA_HOME的值,再重複上述的尋找。若仍失敗,就報圖十所示的錯誤。因此,當你在tomcat安裝目錄下的bin目錄下運行startup.bat檔案時,它就會按照上面所說的第二種方式自動正確設定CATALINA_HOME的值,因為catalina.bat檔案就在tomcat安裝目錄下的bin目錄裡。

雖然在此種情況下能正確運行,但還是建議你正確設定CATALINA_HOME環境變數。與PATH不同的是,PATH系統本身就由,而CATALINA_HOME需要你自己“建立”,在“環境變數”視窗點“建立”即可。

為了能夠在任何目錄下都能運行tomcat安裝目錄下bin目錄裡的批次檔,如startup.bat,可把此目錄添加到PATH環境變數中(我的是d:tomcat7bin)。為了提高靈活性,可在PATH環境變數的最後添加上%catalina_home%bin(與前一個值之間不要忘了用英文的分號隔開)。把catalina_home放置在兩個百分比符號之間,表示引用這個環境變數的值。這樣,當你把tomcat的安裝目錄換了以後,就只需要修改catalina_home的值,而不需要修改PATH的值了,因為它可以自動計算出新的正確值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.