
SET
"временно"устанавливает/изменяет environment variable
.
Как получить «исходный» / «глобальный» / «неизмененный» параметр из оболочки/процесса, в котором он был изменен?
Чтобы объяснить название: SET
работает в том, что я называю
локальный масштаби SETX
вГлобальныйодин.
%ABC%
возвращает мне переменную излокальный масштаб, но я ищу что-то, чтобы получить это отГлобальныйодин.
Таким образом SET
: SETX
:: %ABC%
: ???
решение1
Чтобы избежать путаницы с терминологией, используемой в доменах в сетях, вместо «локальный» говорите «на пользователя», а вместо «глобальный» говорите «на машину» (для всех локальных пользователей).
«Локальный» на самом деле означает «только на этой машине» и может означать длявселокальные пользователи.
Переменные для каждой машины хранятся в
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Переменные для каждого пользователя хранятся в
HKEY_CURRENT_USER\Environment
SETX может быть на пользователя или на машину.
SET является временным (на время сеанса CMD); SETX является постоянным (хранится в реестре).
Переменные, заданные с помощью SETX, недоступны ни в одном сеансе CMD, открытом на момент их установки; они будут доступны в новых сеансах CMD.
Чтобы задать переменную «для каждой машины», используйте параметр /M с SETX.
Пример демонстрации:
Введите это как администратор:
C:\WINDOWS\system32>setx apps %SystemDrive%\apps /m
SUCCESS: Specified value was saved.
Затем откройте еще одно окно cmd как пользователь без прав администратора:
C:\Users\jh>echo %apps%
C:\apps
Хотя «apps» действует на уровне всего компьютера, %apps% получает значение для обычного пользователя.
Таким образом, формат «%ABC%» принимает как пользовательские, так и машинные переменные.
Чтобы очистить эту переменную, как администратор, выполните:setx apps "" /m