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

1. Описание команды SETX.

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

Синтаксис 1:

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

Синтаксис 2:

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

Синтаксис 3:

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

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

  • /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.3. Примечания.

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

  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 извлекаются из реестра в десятичном формате.

Пользовательские переменные — в раздел : 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. Удалить пользовательскую переменную MyVar:

C:\ REG delete HKCU\Environment /V MyVar

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

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

2.1. Создать на локальном компьютере переменную среды пользователя с именем MACHINE, принимающую значение COMPAQ:

C:\ SETX MACHINE COMPAQ

2.2. Для просмотра значений переменных можно воспользоваться командой echo. Отобразить значение переменной MACHINE:

C:\ echo %MACHINE%

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

C:\ set | Find /i "machine"

2.4. Создать на локальном компьютере системную переменную MACHINE, принимающую значение Asustek Computer:

C:\ setx.exe MACHINE "Asustek Computer" /M

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

2.5. Сбросить значение переменной окружения MYPATH ( сделать пустым ):

C:\ Setx MYPATH ""

2.6. Создать на локальном компьютере пользрвательскую переменную окружения с именем MYPATH , принимающую текущее значение переменной PATH – пути поиска исполняемых файлов, сформированные на момент выполнения команды:

C:\ SETX MYPATH "%PATH%"

Например Path=С:\Program Files\Far;С:\Program Files\NVIDIA Corporation\PhysX\Common;С:\WINDOWS\system32;С:\WINDOWS;С:\WINDOWS\System32\Wbem;:

C:\ SETX MYPATH ~PATH~

В качестве значения переменной будет записана строка, в которой символы ~ будут заменены на символы %, т.е в качестве значения переменной MYPATH будет записана строка %PATH%

2.7. Установить на удаленном компьютере Server значение переменной окружения MYPATH равное текущему значению переменной PATH локального компьютера:

C:\ SETX /S Server /U Mydomain\Admin /P AdmPass MYPATH "%PATH%"

Для подключения к удаленному компьютеру используется имя пользователя Admin в домене Mydomain и пароль AdmPass.

2.8. Установить значение среды TZONE равным содержимому ключа реестра HKLM\System\CurrentControlSet\Control\timeZoneInformation\StandardName:

C:\ SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\timeZoneInformation\StandardName

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

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

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

2.9. Создать на удаленном компьютере с IP-адресом 192.168.0.1 переменную BUILD, принимающую значение ключа реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber:

C:\ setx /s 192.168.0.1 /U admin /P Admpass BUILD /K "HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber"

2.10. Разбор содержимого текстового файла ipconfig.out с выводом координат каждого поля в виде x,y – (номер строки, номер колонки):

C:\ SETX /F ipconfig.out /X

Нумерация строк и колонок начинается с 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.

2.11. Присвоить переменной Key1 значение из текстового файла file.out соответствующее содержимому второй строки третьей колонки – в данном примере — b3:

C:\ SETX Key1 /F file.out /A 1,2 

2.12. Присвоить переменной Key2 значение поля из текстового файла:

C:\ SETX Key2 /F file.out /R 0,2 b3 

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