Windows の環境変数における SETX と SET の違いは何ですか

Windows の環境変数における SETX と SET の違いは何ですか

SETXとの違いは何ですかSET?

私の理解によれば、
どちらも環境変数を設定するために使用され、
SETXはユーザー変数用です。
SETはシェル変数用です。

答え1

残念ながら、それほど単純ではありません。環境変数は、あなたが示唆するように、スコープによって制限されませんが、動詞を比較すると、変数内の値の有効期間が異なるというのは正しいです。

set現在のシェル (ウィンドウ) の環境変数を変更します。変更はすぐに有効になりますが、一時的なものです。変更は実行中の他のシェルには影響しません。シェルを閉じるとすぐに、set を再度実行するまで新しい値は失われます。

setx値を永続的に変更します。これは将来のすべてのシェルに影響しますが、すでに実行中のシェルの環境は変更されません。変更を有効にするにはシェルを終了して再度開く必要がありますが、値は再度変更するまで変更されたままになります。

例についてはこちらをご覧ください:http://batcheero.blogspot.com/2008/02/set-and-setx.html

答え2

実際には、変数は3つのスコープで設定できます:
1. シェル
2. ユーザー
3. システム (マシン) またはグローバル

SET: 一時的に現在のシェルスコープを作成または更新します。

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継承します。explorer.exe

関連情報