SetX - создание или изменение переменных среды Windows


Команда SETX используется для создания новых и изменения существующих переменных среды окружения в командной строке Windows. Переменные окружения, это переменные, принимаемые значения которых характеризуют программную среду, в которой выполняется текущая программа - пути системных файлов, сведения об аппаратных средствах, каталоги пользователей и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных программ или с помощью команды SET. Команда SetX, является более мощным средством администрирования Windows, позволяющим изменять системные или пользовательские переменные не только на локальном компьютере, но и на удаленном. Переменные можно задавать с помощью аргументов, параметров реестра или ввода из файла. В отличие от команды SET, изменения переменных окружения, сделанные командой SetX, записываются в реестр и действуют не только в данном сеансе командной строки, но и в любом другом.
Первоначально, утилита SetX.exe входила в состав Windows 2000 Resource Kit в качестве дополнительного средства системного администрирования, но начиная с Windows Vista - входит в стандартный пакет поставки системы.

Используются три варианта синтаксиса команды SetX:

Синтаксис 1:

SETX [/S система [/U [домен\]пользователь [/P [пароль]]]] var значение [/M]

Синтаксис 2:

SETX [/S система [/U [домен\]пользователь [/P [пароль]]]] var /K путь [/M]

Синтаксис 3:

SETX [/S система [/U [домен\]пользователь [/P [пароль]]]] /F файл {var {/A x,y | /R x,y строка}[/M] | /X} [/D разделители]


Параметры командной строки:

/S система - Имя или IP-адрес удаленного компьютера. Если не указан, то команда выполняется по отношению к локальному компьютеру.

/U домен\]пользователь - Пользовательский контекст, в котором должна выполняться эта команда.

/P пароль - Пароль для этого пользовательского контекста.

var - Задаваемая переменная среды.

значение - Значение, назначаемое переменной среды.

/K путь - Задание переменной по информации, cодержащейся в параметре реестра. Путь должен задаваться в формате куст\раздел\...\параметр. Например, HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Control\timeZoneInformation\StandardName.

/F файл - Имя текстового файла, который следует использовать.

/A x,y - Задание абсолютных координат файла (строка X, элемент Y) как параметров поиска в файле.

/R x,y строка - Задание координат относительно значения "строка" как параметров поиска.

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

/X - Отображение содержимого файла с координатами x,y.

/D разделители - Указание дополнительных разделителей, таких как "," или "\". Встроенные разделители: символы пробела, табуляции, возврата каретки и перевода строки. Дополнительным разделителем может быть любой знак ASCII. Максимальное число разделителей, включая встроенные, равняется 15. Вывод справки по использованию. 


Примечания.

1) SETX записывает переменные в главную среду в реестре.

2) На локальном компьютере переменные, созданные или измененные данным средством, будут доступны в будущем окне командной строки, но не в текущем окне CMD.exe.

3) На удаленном компьютере переменные, созданные или измененные данным средством, будут доступны со следующего сеанса входа.

4) Допустимые типы параметров реестра: REG_DWORD, REG_EXPAND_SZ, REG_SZ, REG_MULTI_SZ.

5) Поддерживаемые кусты: HKEY_LOCAL_MACHINE (HKLM), HKEY_CURRENT_USER (HKCU).

6) Разделители определяются с учетом регистра.

7) Значения типа REG_DWORD извлекаются из реестра в десятичном формате. 


Значения переменных окружения ( Environment variables ) записываются в реестр:

Пользовательские переменные - в раздел : HKEY_CURRENT_USER\Environment

Системные переменные - в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 

Если значения каких либо переменных изменены в данной сессии командной строки Windows, то изменения вступят в силу только в новом сеансе, после перезапуска CMD ( или PowerShell ). Для изменения системных переменных ( ключ /M ) требуются права администратора ( "Запуск от имени администратора " в Windows 7). 
Пользовательские переменные запоминаются в профиле и действительны, для перемещаемого профиля, на любом компьютере домена. 
Если одно и то же имя переменной имеется в среде пользователя и в среде системы, то значение пользовательской переменной имеет более высокий приоритет. 

Для редактирования переменных можно использовать панель управления - Панель управления - Система - Дополнительно - Переменные среды ( Control Panel - System - Advanced - Environment Variables )

Для удаления переменных среды можно воспользоваться Панелью управления, удалением ключей с переменными среды редактором реестра или консольной утилитой REG

REG delete HKCU\Environment /V MyVar - удалить пользовательскую переменную MyVar

Присвоение переменной пустого значения командой Setx не приводит к удалению ее имени из реестра, что может стать причиной проблем с выполнением некоторых программ. Если например, имеется пользовательская переменная с пустым значением, то по команде SET она не отображается, и при наличии системной переменной с таким же именем, ее значение станет недоступным из-за более высокого приоритета пользовательской переменной. Поэтому, во избежание конфликтов желательно не оставлять в реестре мусор из переменных с неприсвоенными значениями.

 

 



 

Примеры использования Setx:



SETX MACHINE COMPAQ - создать на локальном компьютере переменную среды пользователя с именем MACHINE, принимающую значение COMPAQ. Для просмотра значений переменных можно воспользоваться командой echo:

echo %MACHINE% - отобразить значение переменной MACHINE

Можно также использовать команду SET в цепочке с командой поиска текста FIND:

set | Find /i "machine" 

setx.exe MACHINE "Asustek Computer" /M - создать на локальном компьютере системную переменную MACHINE, принимающую значение Asustek Computer. Если значение переменной содержит пробелы, то оно заключается в двойные кавычки.

Setx MYPATH "" - сбросить значение переменной окружения MYPATH ( сделать пустым )

SETX MYPATH "%PATH%" - создать на локальном компьютере пользрвательскую переменную окружения с именем MYPATH , принимающую текущее значение переменной PATH – пути поиска исполняемых файлов, сформированные на момент выполнения команды, например, Path=С:\Program Files\Far;С:\Program Files\NVIDIA Corporation\PhysX\Common;С:\WINDOWS\system32;С:\WINDOWS;С:\WINDOWS\System32\Wbem;.SETX MYPATH ~PATH~ - в качестве значения переменной будет записана строка, в которой символы ~будут заменены на символы %, т.е в качестве значения переменной MYPATH будет записана строка %PATH% 

SETX /S Server /U Mydomain\Admin /P AdmPass MYPATH "%PATH%" - установить на удаленном компьютере Server значение переменной окружения MYPATH равное текущему значению переменной PATH локального компьютера. Для подключения к удаленному компьютеру используется имя пользователя Admin в домене Mydomain и пароль AdmPass

SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\timeZoneInformation\StandardName - установить значение среды TZONE равным содержимому ключа реестра

HKLM\System\CurrentControlSet\Control\timeZoneInformation\StandardName 

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

Извлечено значение: "@tzres.dll,-912".

Успех. Указанное значение сохранено.


setx /s 192.168.0.1 /U admin /P Admpass BUILD /K "HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber" - создать на удаленном компьютере с IP-адресом 192.168.0.1переменную BUILD, принимающую значение ключа реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber 

SETX /F ipconfig.out /X - разбор содержимого текстового файла ipconfig.out с выводом координат каждого поля в виде x,y – (номер строки, номер колонки) . Нумерация строк и колонок начинается с 0.

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

a1 a2 a3 a4 a5 
b1 b2 b3 b4 b5 
c1 c2 c3 c4 c5 
d1 d2 d3 d4 d5


Результат обработки этого содержимого командой SetX

(0,0 a1)(0,1 a2)(0,2 a3)(0,3 a4)(0,4 a5)
(1,0 b1)(1,1 b2)(1,2 b3)(1,3 b4)(1,4 b5)
(2,0 c1)(2,1 c2)(2,2 c3)(2,3 c4)(2,4 c5)
(3,0 d1)(3,1 d2)(3,2 d3)(3,3 d4)(3,4 d5)



Таким образом, элемент (0,0 a1) - это координаты 0,0, которым соответствует значение a1

SETX Key1 /F file.out /A 1,2 присвоить переменной Key1 значение из текстового файла file.outсоответствующее содержимому второй строки третьей колонки – в данном примере - b3

SETX Key2 /F file.out /R 0,2 b3 присвоить переменной Key2 значение поля из текстового файла. Для поиска в текстовом файле используется шаблон b3 и значение извлекается по координатам 0,2относительно найденного b3, т.е. в данном примере – это будет b5 ( Смещение по строкам= 0, смещение по колонкам = 2)