Работать с переменными среды в Windows можно по-разному. Данные операционные системы издавна обладают дружественным графическим интерфейсом (который стал более беспорядочным в последних версиях), но не только графикой сильны ОС Windows. Продолжая цикл статей о различных командах в Windows, остановимся на работе с переменными среды в командной строке.
SetX.exe это отдельная утилита, располагающая по адресу %WINDIR%\System32\setx.exe. Если сравнивать её возможности с командой SET, то они представляются более интересными, хотя бы по той причине, что изменения переменных окружения, внесённые через SETX, записываются в реестр. Это значит, что они действуют не только в текущем сеансе командной строки, но и в любом другом.
Первоначально утилита SetX.exe входила в Windows 2000 Resource Kit, но начиная с Windows Vista это утилита из стандартного пакета поставки Windows.
У команды SETX целых три синтаксиса. Их использование зависит от того, что выступает источником значения переменной.
Синтаксис 1:
SETX [/S [компьютер] [/U [домен]\[пользователь] [/P [пароль]]]] [имя_переменной] [значение] [/M]
Синтаксис 2:
SETX [/S [компьютер] [/U [домен]\[пользователь] [/P [пароль]]]] [имя_переменной] /K [путь_к_параметру_реестра] [/M]
Синтаксис 3:
SETX [/S [компьютер] [/U [домен]\[пользователь] [/P [пароль]]]] /F [файл] {var {/A x,y | /R x,y строка}[/M] | /X} [/D разделители]
Синтаксис 1 используется, если мы задаём значение переменной непосредственно из командной строки, синтаксис 2, если значение переменной берётся из параметра реестра, а синтаксис 3, если из текстового файла. Далее расшифровка синтаксисов команды.
/S — имя или IP-адрес удалённого компьютера. Если команда выполняется на локальном компьютере, указывать не нужно;
/U — учётная запись, используемая для выполнения команды. Если не указана, команда будет выполняться из-под текущего пользователя;
/P — пароль от указанной учётной записи. Если запись не указана, пароль не требуется;
/M — ключ для создание системной переменной (в разделе HKEY_LOCAL_MACHINE). Без его указания переменная будет создана для пользователя (в разделе HKEY_CURRENT_USER);
/K — задание значения переменной по информации из параметра реестра;
/F — имя текстового файла, откуда берётся значение переменной;
/A — абсолютные координаты (строка x, элемент y) для поиска значения переменной в файле;
/R — задание координат относительно указанного элемента в файле для поиска значения переменной;
/X — отображение содержимого файла с указанными координатами;
/D — указание дополнительных разделителей. В качестве разделителя может выступать любой знак ASCII. Максимальное число разделителей равно 15.
Приведём несколько примеров использования команды SETX.
Создать на локальной машине пользовательскую переменную %PRIMER% со значением «new»:
setx PRIMER new
Создать на локальном компьютере системную переменную %PRIMER% со значение «new 2»:
setx PRIMER "new 2" /M
Обратите внимание: если значение содержит пробел, оно должно заключаться в кавычки.
Сделать значение переменной PRIMER пустым:
setx PRIMER ""
Можно взять значение переменной из другой переменной. Возьмём для переменной %PRIMER% значение из переменной %PATH%:
setx PRIMER "%PATH%"
Теперь проделаем такую же операцию, но на удаленном компьютере с именем TEST-PC. Этот компьютер входит в домен DOMAIN99, а для подключения к нему мы используем доменную учётную запись Admin. Так как это всего лишь пример, зададим для учётной записи несложный пароль «PrimerPass».
setx /S TEST-PC /U DOMAIN99\Admin /P PrimerPass PRIMER "%PATH%"
Установим значение переменной %PRIMER% равное параметру реестра TimeZoneKeyName, находящемуся по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation:
setx PRIMER /K HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\TimeZoneKeyName
Теперь разберём установку значения переменной из файла. Этот вопрос следует разобрать поподробнее. Итак, у нас есть файл следующего содержания, который лежит в корне диска C:
Чтобы посмотреть координаты содержимого файла, используем команду
setx /F C:\primer.txt /X
Нумерация строк и колонок начинается с 0. Таким образом, первый элемент (в данном случае это a1) будет иметь координаты 0,0.
Присвоим переменной %PRIMER% значение из файла C:\primer.txt, которое равнялось бы пятому элементу третьей строки (координаты 2,4). В данном случае это c5.
setx PRIMER /F C:\primer.txt /A 2,4
А вот другая команда:
setx PRIMER /F C:\primer.txt /R 2,1 b2
В данном случае указаны не абсолютные, а относительные координаты. Точкой отсчёта является элемент b2 с координатами 1,1. Прибавляем координаты по горизонтали и по вертикали, получаем 3,2. Это элемент d3.
Напоследок о некоторых особенностях команды SETX.
- Переменные, созданные или отредактированные через SETX на локальном компьютере, будут доступны в будущих окнах командной строки, но не в текущем;
- Переменные, созданные или отредактированные через SETX на удалённом компьютере, будут доступны со следующего сеанса входа;
- Допустимы следующие типы параметров реестра: REG_DWORD, REG_EXPAND_SZ, REG_SZ, REG_MULTI_SZ;
- Значения типа REG_DWORD извлекаются из реестра в десятичном формате;
- Пользовательские переменные запоминаются в профиле и действительны для перемещаемого профиля на любом компьютере домена;
- Если среди пользовательских переменных и среди системных переменных имеются переменные с одним и тем же именем, то приоритет имеют пользовательские переменные;
- Удалить переменную среды через SETX нельзя. Для этого следует использовать графический интерфейс системы или реестр Windows (в командной строке можно использовать команду REG DELETE).
Итак, мы познакомились с мощным инструментом по работе с переменными среды Windows в командной строке — утилитой SetX.exe. Надеюсь, что после этой статьи синтаксис этой утилиты уже не кажется вам таким сложным.
Статьи по теме: