DEV Community

codemee
codemee

Posted on

SetEnv 工具程式

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.
Enter fullscreen mode Exit fullscreen mode

操作使用者的環境變數

設定環境變數:

>setenv -ua MEE_HOME c:\mee
Enter fullscreen mode Exit fullscreen mode

重啟 cmd 後可以看到環境變數的新值:

>echo %MEE_HOME%
c:\mee
Enter fullscreen mode Exit fullscreen mode

使用百分比符號可以在既有的環境變數後面添加內容:

>setenv -ua MEE_HOME %c:\temp
Enter fullscreen mode Exit fullscreen mode

重啟 cmd 後可以看到它會自動幫你加上分隔的分號, 然後將內容加在最後面:

>echo %MEE_HOME%
c:\mee;c:\temp
Enter fullscreen mode Exit fullscreen mode

這種以分號分隔項目的環境變數 setenv 稱為展開 (expanded) 的環境變數, 你也可以從展開的環境變數中刪除指定項目:

>setenv -ud MEE_HOME %c:\temp
Enter fullscreen mode Exit fullscreen mode

重啟後就會發現只剩下單一項目:

>echo %MEE_HOME%
c:\mee;
Enter fullscreen mode Exit fullscreen mode

你也可以把項目新增到環境變數的開頭:

>setenv -uap MEE_HOME %c:\code
Enter fullscreen mode Exit fullscreen mode

重啟後就可以看到新增的項目:

>echo %MEE_HOME%
c:\code;c:\mee;
Enter fullscreen mode Exit fullscreen mode

如果要刪除環境變數:

>setenv -ud MEE_HOME
Enter fullscreen mode Exit fullscreen mode

重啟後可以看到環境變數已經被刪除了:

>echo %MEE_HOME%
%MEE_HOME%
Enter fullscreen mode Exit fullscreen mode

你也可以嵌入其它環境變數到設定值內, 但要注意使用的是 "~" 而不是 "%":

>setenv -ua CODE c:\code

>setenv -ua PYTHON ~CODE~\python
Enter fullscreen mode Exit fullscreen mode

重啟後可以看到生效:

>echo %PYTHON%
c:\code\python
Enter fullscreen mode Exit fullscreen mode

注意到這個嵌入是動態的, 如果你變更 CODE 的值:

>setenv -ua CODE d:\code
Enter fullscreen mode Exit fullscreen mode

重啟 cmd 後就會發現值也會跟著變化:

>echo %PYTHON%
d:\code\python
Enter fullscreen mode Exit fullscreen mode

操作系統環境變數

要操作系統環境變數必須要以管理員身分啟動 cmd, 在 Windows Terminal 中可以按住 Alt 後再 + 上按滑鼠左鍵, 就可以管理員身分開啟新的 Windows Terminal。大部分的操作都跟使用者的環境變數類似, 只是選項中少掉了 'u' 而已。

設定環境變數值:

>setenv -a MEE_HOME c:\mee
Enter fullscreen mode Exit fullscreen mode

重啟查看結果:

>echo %MEE_HOME%
c:\mee
Enter fullscreen mode Exit fullscreen mode

新增項目到展開的環境變數尾端:

>setenv -a MEE_HOME %c:\temp
Enter fullscreen mode Exit fullscreen mode

重啟可看到結果:

>echo %MEE_HOME%
c:\mee;c:\temp
Enter fullscreen mode Exit fullscreen mode

當然也可以新增項目到展開的環境變數的開頭:

>setenv -ap MEE_HOME %c:\windows
Enter fullscreen mode Exit fullscreen mode

重啟可以看到結果, 一樣會幫你加上分隔的分號:

>echo %MEE_HOME%
c:\windows;c:\mee;c:\temp
Enter fullscreen mode Exit fullscreen mode

你也可以刪除展開的環境變數裡指定的項目:

>setenv -d MEE_HOME %c:\temp
Enter fullscreen mode Exit fullscreen mode

重啟後就會發現結尾處的 "c:\temp" 被刪除了:

>echo %MEE_HOME%
c:\windows;c:\mee;
Enter fullscreen mode Exit fullscreen mode

以下則會刪除開頭端的 "c:\windows":

>setenv -d %c:\windows
Enter fullscreen mode Exit fullscreen mode

重啟後的確看到刪除後的結果:

>echo %MEE_HOME%
c:\mee;
Enter fullscreen mode Exit fullscreen mode

另外, 它也會幫你檢查重複的內容:

>setenv -a MEE_HOME %c:\temp
>setenv -ap MEE_HOME %c:\temp
Enter fullscreen mode Exit fullscreen mode

重啟後會看到重複的內容並不會重複加入:

>echo %MEE_HOME%
c:\mee;c:\temp
Enter fullscreen mode Exit fullscreen mode

一樣可以刪除環境變數:

>setenv -d MEE_HOME
Enter fullscreen mode Exit fullscreen mode

重啟後可確認的確被刪除了:

>echo %MEE_HOME%
%MEE_HOME%
Enter fullscreen mode Exit fullscreen mode

結語

有了 SetEnv 工具程式, 就不需要使用如下的方式修改 PATH:

setx %PATH%;c:\code
Enter fullscreen mode Exit fullscreen mode

可避免路徑過長超過 1024 個字元的問題, 而是改用:

setenv -ua PATH %c:\code
Enter fullscreen mode Exit fullscreen mode

或是

setenv -a PATH %c:\code
Enter fullscreen mode Exit fullscreen mode

將新的路徑加到使用者或系統的 PATH 環境變數尾端, 完全沒有字數限制的問題。

Top comments (0)