在 Windows 10 的 cmd 中設定環境變數(尤其是 PATH)並使用 cd 時出現問題

在 Windows 10 的 cmd 中設定環境變數(尤其是 PATH)並使用 cd 時出現問題

我正在關註一個教學設定 Apache Storm。 (這只是為了上下文——這對我的錯誤並不重要。)

所以它告訴我設定一些環境變量,特別是%JAVA_HOME%%STORM_HOME%asC:\Java\jdk1.8.0_60\C:\storm-0.9.1-incubating-SNAPSHOT-12182013\,分別。我以前從未做過此類事情,所以我查找瞭如何執行此操作並運行:

C:\>setx %JAVA_HOME% C:\JAVA\jdk1.8.0_60\

它給出了:SUCCESS: Specified value was saved.

然後我做了:

C:\>setx %STORM_HOME% C:\storm-0.9.1-incubating-SNAPSHOT-12182013\

它給出了同樣的事情:SUCCESS: Specified value was saved.

然後教程說添加%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;PATH.我進去C:\>PATH看看它現在是什麼,它給了:

PATH=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\

所以我想我可以通過這樣做來添加它

C:\>setx PATH C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\; 

換句話說,我只是嘗試調用setx並將PATH其設置為當前的值,並將教程中所說的內容附加到末尾。然而SUCCESS: Specified value was saved.,當我輸入時:

C:\>PATH

它返回原來的內容(我嘗試附加的內容不存在)。我嘗試了另一種方法。我跑了

C:\>PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

然後,當我輸入時,C:\>PATH它會返回完整的路徑,其中包含我想要附加的內容。

我現在面臨的問題是使用這些變數。當我進入

C:\>cd %STORM_HOME%

它說The system cannot find the path specified.我嘗試重新啟動計算機,但PATH已重置,但仍然遇到相同的錯誤。

答案1

@DavidPostill 是正確的,但實際上並不能解決您的問題。實際答案要簡單得多:命令提示字元與任何程式一樣,在啟動時接收其環境變數。當您設定持久環境變數(每個使用者或系統範圍)時,您正在變更確定未來進程的環境變數的登錄值。您實際上並沒有更改中的任何環境變量目前的根本沒有過程!

來自 SETX 說明文件 ( setx /?):

 2) On a local system, variables created or modified by this tool
    will be available in future command windows but not in the
    current CMD.exe command window.

有兩種方法可以解決這個問題。如文件所示,最簡單的方法是啟動一個新的 CMD 實例。這很簡單,但是您將沒有命令歷史記錄等set。執行此操作的最佳方法實際上是set先使用,然後setx使用當前環境變數進行呼叫。這是您上面所做的一個範例:

REM Set the local version of JAVA_HOME
set JAVA_HOME=C:\JAVA\jdk1.8.0_60\
REM Set the local version of STORM_HOME
set STORM_HOME=C:\storm-0.9.1-incubating-SNAPSHOT-12182013\
REM Append the new values to PATH
set PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;
REM Do whatever checks you want to do to confirm that those are set correctly
cd %STORM_HOME%
REM Now, save the current (local) values of the environment variables
REM to persistent storage (registry)
setx JAVA_HOME %JAVA_HOME%
setx STORM_HOME %STORM_HOME%
setx PATH %PATH%

注意字元的使用%。當您要擴展環境變數時,而不是當您想要引用環境變數時,您可以使用它們。上面的行setx被處理為“將用戶範圍環境變量 JAVA_HOME 設置為該進程的 JAVA_HOME 當前本地值”,這相當於說“將持久環境變量 JAVA_HOME 設置為C:\JAVA\jdk1.8.0_60\”,因為這就是 %JAVA_HOME% 在當前進程。

答案2

為什麼 SETX 沒有更新我的 PATH

setx 路徑 C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME %\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

你的setx語法是錯的:

  • 將引號"放在第二個參數(“值”)周圍。

    如果第二個參數包含空格並且%PATH%幾乎總是包含空格,則應將其括起來。

您應該使用:

setx PATH "%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin"

或者:

setx PATH "%STORM_HOME%\bin;%JAVA_HOME%\bin;%PATH%"

句法

SETX [/s Computer [Credentials]] Variable Value [/m]

SETX [/s Computer [Credentials]] [Variable] /k RegistryPath [/m]

SETX [/s Computer [Credentials]] /f FileName {[Variable] {/a L,T | /r oL,oT "SearchString"} [/m] | /x} [/d Delimiters]

來源設定x


進一步閱讀

  • Windows CMD 命令列的 AZ 索引- 與 Windows cmd 行相關的所有內容的絕佳參考。
  • 設定x- 永久設定環境變量,SETX可用於設定機器(HKLM)或目前登入使用者(HKCU)的環境變數。

相關內容