Windows 的 cmd 下雖然有提供 setx 指令可以修改系統的環境變數, 但是它有一個要命的限制, 就是設定的值不能超過 1024 個字元, 這對一般的環境變數沒有差, 可是當你要設定 PATH
的時候, 就很容易超過限制。更糟的是超過限制時, 它會自動截掉超過的部分後儲存到環境變數中。
為了解決這個問題, 有善心人士寫了一個工具程式 SetEnv, 以下我們就來說明它的用法。
安裝 SetEnv
SetEnv 可以下載安裝檔或是原始碼壓縮檔, 由於它是單獨的一個 exe 檔, 所以比較建議的方式就是下載原始碼壓所檔, 從解開的 Visual Studio C++ 專案的 Release 資料夾中取出 setenv.exe 放到 c:\Windows 或任何 PATH 指定的路徑下即可。
以下指令可查看使用方法:
>setenv /?
SetEnv - Version 1.08 - Copyright (C) 2005-2007 - Jonathan Wilkes
Allows you to set/update/delete User or System Environment Variables, e.g. PATH.
For Windows 9x/NT/2000/XP/S2K3/Vista
Usage: SetEnv -<options> <name> <value>
Options (Default is System variable, add -u for User):
SetEnv -a name value Set the variable to the specified value
SetEnv -a name %value Add a value to an expanded variable
SetEnv -ap name %value Prepend a value to an expanded variable
SetEnv -d name Delete the variable
SetEnv -d name %value Delete the value from the expanded variable
SetEnv -ua name Add a USER environment variable
SetEnv -ud name Deletes a USER environment variable
SetEnv -e Show examples of using SetEnv
Return Values:
0 Success
5 Access Denied
1 Other Error (Error messages go to stderr)
Notes:
If you want to create an expanded variable with multiple values, e.g. PATH
specify the value with a preceeding '%' character, e.g. SetEnv PATH %d:\Bin
Use double quotes around any value which contains spaces.
操作使用者的環境變數
設定環境變數:
>setenv -ua MEE_HOME c:\mee
重啟 cmd 後可以看到環境變數的新值:
>echo %MEE_HOME%
c:\mee
使用百分比符號可以在既有的環境變數後面添加內容:
>setenv -ua MEE_HOME %c:\temp
重啟 cmd 後可以看到它會自動幫你加上分隔的分號, 然後將內容加在最後面:
>echo %MEE_HOME%
c:\mee;c:\temp
這種以分號分隔項目的環境變數 setenv 稱為展開 (expanded) 的環境變數, 你也可以從展開的環境變數中刪除指定項目:
>setenv -ud MEE_HOME %c:\temp
重啟後就會發現只剩下單一項目:
>echo %MEE_HOME%
c:\mee;
你也可以把項目新增到環境變數的開頭:
>setenv -uap MEE_HOME %c:\code
重啟後就可以看到新增的項目:
>echo %MEE_HOME%
c:\code;c:\mee;
如果要刪除環境變數:
>setenv -ud MEE_HOME
重啟後可以看到環境變數已經被刪除了:
>echo %MEE_HOME%
%MEE_HOME%
你也可以嵌入其它環境變數到設定值內, 但要注意使用的是 "~" 而不是 "%":
>setenv -ua CODE c:\code
>setenv -ua PYTHON ~CODE~\python
重啟後可以看到生效:
>echo %PYTHON%
c:\code\python
注意到這個嵌入是動態的, 如果你變更 CODE 的值:
>setenv -ua CODE d:\code
重啟 cmd 後就會發現值也會跟著變化:
>echo %PYTHON%
d:\code\python
操作系統環境變數
要操作系統環境變數必須要以管理員身分啟動 cmd, 在 Windows Terminal 中可以按住 Alt 後再 + 上按滑鼠左鍵, 就可以管理員身分開啟新的 Windows Terminal。大部分的操作都跟使用者的環境變數類似, 只是選項中少掉了 'u' 而已。
設定環境變數值:
>setenv -a MEE_HOME c:\mee
重啟查看結果:
>echo %MEE_HOME%
c:\mee
新增項目到展開的環境變數尾端:
>setenv -a MEE_HOME %c:\temp
重啟可看到結果:
>echo %MEE_HOME%
c:\mee;c:\temp
當然也可以新增項目到展開的環境變數的開頭:
>setenv -ap MEE_HOME %c:\windows
重啟可以看到結果, 一樣會幫你加上分隔的分號:
>echo %MEE_HOME%
c:\windows;c:\mee;c:\temp
你也可以刪除展開的環境變數裡指定的項目:
>setenv -d MEE_HOME %c:\temp
重啟後就會發現結尾處的 "c:\temp" 被刪除了:
>echo %MEE_HOME%
c:\windows;c:\mee;
以下則會刪除開頭端的 "c:\windows":
>setenv -d %c:\windows
重啟後的確看到刪除後的結果:
>echo %MEE_HOME%
c:\mee;
另外, 它也會幫你檢查重複的內容:
>setenv -a MEE_HOME %c:\temp
>setenv -ap MEE_HOME %c:\temp
重啟後會看到重複的內容並不會重複加入:
>echo %MEE_HOME%
c:\mee;c:\temp
一樣可以刪除環境變數:
>setenv -d MEE_HOME
重啟後可確認的確被刪除了:
>echo %MEE_HOME%
%MEE_HOME%
結語
有了 SetEnv 工具程式, 就不需要使用如下的方式修改 PATH:
setx %PATH%;c:\code
可避免路徑過長超過 1024 個字元的問題, 而是改用:
setenv -ua PATH %c:\code
或是
setenv -a PATH %c:\code
將新的路徑加到使用者或系統的 PATH 環境變數尾端, 完全沒有字數限制的問題。
Top comments (0)