В чем разница между SETX и SET в переменных среды в Windows?

В чем разница между SETX и SET в переменных среды в Windows?

В чем разница между SETXи SET?

Насколько я понимаю:
оба используются для установки переменных среды
SETX: для пользовательских переменных.
SETдля переменных оболочки.

решение1

Боюсь, что все не так просто. Переменные окружения не ограничены областью действия, как вы предполагаете, но вы правы, что время жизни значения в переменной отличается при сравнении глаголов.

setизменяет текущие значения окружения оболочки (окна), и изменение становится доступным немедленно, но оно временное. Изменение не повлияет на другие запущенные оболочки, и как только вы закроете оболочку, новое значение будет потеряно до тех пор, пока вы не запустите set снова.

setxизменяет значение навсегда, что влияет на все будущие оболочки, но не изменяет среду уже запущенных оболочек. Вам придется выйти из оболочки и снова открыть ее, прежде чем изменение станет доступным, но значение останется измененным, пока вы снова его не измените.

Вот пример:http://batcheero.blogspot.com/2008/02/set-and-setx.html

решение2

На самом деле мы можем установить переменную в трех областях:
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 ""

В переменных среды пользователя и системы графического интерфейса.

введите описание изображения здесь

решение3

Добавляю момент, который упустили из виду другие отвечающие.

Чтобы задать системную переменную среды, а не пользовательскую переменную среды, нам просто нужно использовать параметр /m в команде setx и запустить ее из командной строки с повышенными привилегиями (администратора).

setx variable value /m

Пример: Откройте командную строку от имени администратора и выполните

setx Path "%Path%;C:\Users\User\Libs" /m

Пояснение: Приведенная выше команда добавит «C:\Users\User\Libs» к уже существующей переменной пути (системной переменной среды).

Безаргумент, он будет вносить изменения или создавать только переменную Path на уровне пользователя.

Из руководства пользователя 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процесс обновляется функцией API Windows, которая устанавливает переменную среды (менее вероятно), так что будущие открытые cmd.exes наследуют explorer.exeсреду, поскольку они являются дочерними.

Связанный контент