SETX
和 和有什麼差別SET
?
據我的理解:
兩者都是用來設定環境變數的,
SETX
都是用來設定使用者變數的。
SET
用於 shell 變數。
答案1
恐怕事情沒那麼簡單。正如您所建議的,環境變數不受範圍限制,但您是對的,在比較動詞時變數中值的生命週期是不同的。
set
修改目前 shell(視窗)的環境值,並且更改立即可用,但它是臨時的。此變更不會影響正在執行的其他 shell,一旦關閉 shell,新值就會遺失,直到您再次執行 set 為止。
setx
永久修改該值,這會影響所有未來的 shell,但不會修改已經執行的 shell 的環境。您必須退出 shell 並重新開啟它,變更才可用,但該值將保持修改狀態,直到您再次變更為止。
請參閱此處的範例:http://batcheero.blogspot.com/2008/02/set-and-setx.html
答案2
實際上我們可以在三個範圍內設定變數:
1. Shell
2. User
3. System (Machine) 或 Global
SET :建立或更新臨時的目前 shell 作用域。
C:\Users\977246>set /?
Displays, sets, or removes cmd.exe environment variables.
SET [variable=[string]]
variable Specifies the environment-variable name.
string Specifies a series of characters to assign to the variable.
Type SET without parameters to display the current environment variables.
SETX :建立或更新目前使用者環境變數以永久保存。
C:\Users\977246>setx /?
SetX has three ways of working:
Syntax 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
Syntax 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
Syntax 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
Description:
Creates or modifies environment variables in the user or system
environment. Can set variables based on arguments, regkeys or
file input.
To remove the variable set value to empty string as follows
Example: setx path ""
在 GUI 使用者和系統環境變數中。
答案3
補充一下其他回答者忽略的一點。
要設定係統環境變數而不是使用者環境變量,我們只需在 setx 命令中使用 /m 選項並從提升的(管理員)命令提示字元運行它。
setx variable value /m
範例:以管理員身份開啟命令提示字元並執行
setx Path "%Path%;C:\Users\User\Libs" /m
說明:上述指令會將「C:\Users\User\Libs」追加到已經存在的路徑變數(系統環境變數)中。
如果沒有/米參數,它將僅更改或建立用戶級路徑變數。
從 setx 使用手冊中,
/M 指定應在系統範圍 (HKEY_LOCAL_MACHINE) 環境中設定變數。預設是在HKEY_CURRENT_USER環境下設定該變數。
答案4
setx.exe
是一個在中設定使用者/系統環境變數的程序註冊表,用於將來的流程創建。set
是一個顯示命令流程在目前進程的PEB中的參數區塊中的環境中的環境變數(顯示使用者和系統變數以及目前或父進程使用 定義的變數set
),以及允許在其中定義更多變數可以在進程資源管理器中查看目前流程以及環境的變化。
cmd /c set variable=value
將為它cmd.exe
創建的子進程設定變數(它將自身附加到父控制台視窗並且不分配自己的環境,並繼承父進程的環境),因此當您在同一視窗中cmd.exe
執行此操作後,它不會生效,set
因為它指的是父進程cmd.exe
。頂級進程直接從註冊表繼承其環境,並explorer.exe
動態更新其環境變數(與大多數其他應用程式不同),因此當您setx
甚至不會更新當前進程環境時,只會更新註冊表(由explorer.exe
或進程explorer.exe
讀取)由設定環境變數的Windows API 函數更新(不太可能),以便將來開啟的cmd.exe
s 繼承explorer.exe
的環境,因為它們是子級。