Windows環境變數中SETX和SET有什麼差別

Windows環境變數中SETX和SET有什麼差別

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.exes 繼承explorer.exe的環境,因為它們是子級。

相關內容