В чем разница между
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.exe
s наследуют explorer.exe
среду, поскольку они являются дочерними.