
我正在關註一個教學設定 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)的環境變數。