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

63

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

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

Premraj
источник
3
Попробуйте SET /?и SETX /?- это должно дать вам некоторые идеи.
Изи
2
Также см. Ссылки SS64 для SET и SETX . SS64 является отличным справочником команд для нескольких языков и командных сред - я считаю его особенно удобным для CMD и PowerShell.
Изи
Ответ

Ответы:

83

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

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

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

Смотрите здесь для примера: http://batcheero.blogspot.com/2008/02/set-and-setx.html

Фрэнк Томас
источник
13
это очень хорошо написано, я бы добавил, что setx меняет реестр
barlop
На самом деле это даже не так просто, как описано здесь. Есть «изменчивые» переменные среды, о которых следует помнить. И при некоторых обстоятельствах список переменных, отображаемых командой SET, будет отличаться в зависимости от того, вызвал ли пользователь «повышенную» командную строку или нет.
kreemoweet
10

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

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

Premraj
источник
3

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

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

setx variable value /m

Пример: откройте командную строку от имени администратора и запустите

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

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

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

Из руководства пользователя setx,

/ M Указывает, что переменная должна быть установлена ​​в общесистемной (HKEY_LOCAL_MACHINE) среде. По умолчанию переменная устанавливается в среде HKEY_CURRENT_USER.

Рэндзю Хосе
источник