Команда SET — работа с переменными среды Windows
    Команда SET используется для просмотра и изменения переменных среды окружения в командной строке Windows. Переменные окружения — это переменные, принимаемые значения которых характеризуют среду, в которой выполняется текущая программа — пути системных файлов, сведения об аппаратных средствах, каталоги пользователя и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных процессов или с помощью команды SET . Для просмотра значения, принимаемого конкретной переменной можно воспользоваться командой :
SET переменная
SET PATH — отобразить значение переменной PATH
Для создания новой переменной, или изменения значения существующей, используется команда :
переменная — Имя переменной среды.
строка — Строка символов, присваиваемая указанной переменной.
SET MyName=Vasya — установить значение переменной MyName
SET path=C:\progs;%path% — изменить значение переменной PATH , добавив в начало строки C:\progs
Значение, принимаемое переменной , доступно для обработки в командных файлах, при использовании ее имени, заключенного в знаки процента — % . Например команда выдачи текста на дисплей ECHO в виде:
ECHO date — выведет на экран слово «date», а команда
ECHO %date% выведет на экран значение переменной date , т.е. текущую дату в формате операционной системы.
Команда SET без параметров используется для вывода текущих значений переменных среды.
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData \Local\Temp
TMP=C:\Users\Usr\AppData \Local\Temp
USERDOMAIN=test7
USERNAME=Usr
USERPROFILE=C:\Users\Usr
windir=C:\windows
Кроме переменных, отображаемых в списке, при вызове команды SET, существуют и другие, значения которых изменяется динамически:
%CD% — принимает значение текущего каталога.
%DATE% — принимает значение текущей даты.
%TIME% — принимает значение текущего времени.
%RANDOM% — значение случайного числа в диапазоне между 0 и 32767.
%ERRORLEVEL% — текущее значение ERRORLEVEL, специальной переменной, которая используется в качестве признака результата выполнения программы.
%CMDEXTVERSION% значение версии расширенной обработки команд CMD.EXE.
%CMDCMDLINE% — раскрывается в исходную командную строку, которая вызвала командный процессор .
Если при вызове команды SET указать только часть имени, то будет выведен список переменных, имена которых начинаются с указанной строки. Например:
SET U — выведет значения всех переменных, имена которых начинаются с ‘U’.
Команда SET поддерживает два дополнительных ключа:
SET /P variable=[promptString]
Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется. Обработчик выражений очень прост и поддерживает следующие операции, перечисленные в порядке убывания приоритета:
| () * / % + — > & ^ | = , | — группировка — арифметические операторы — арифметические операторы — двоичный сдвиг — двоичное И — двоичное исключающее ИЛИ — двоичное ИЛИ — присвоение — разделитель операторов |
При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена в системе, вместо нее подставляется нулевое значение. Это позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения значений. Если команда SET /A вызывается из командной строки, а не из пакетного файла, она выводит окончательное значение выражения. Слева от любого оператора присваивания должно стоять имя переменной среды. Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс:
0x — для шестнадцатеричных чисел
0 — для восьмеричных чисел.
Пример использования префиксов:
SET /A REZ=0xA+012
ECHO %REZ%
В данном командном файле значение переменной REZ вычисляется сложением числа 10, представленного в шестнадцатеричном виде ( 0xA ) и числа 10 , представленного в восьмеричном ( 012 ).
Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым. Данный ключ позволяет организовать диалог с пользователем в командном файле:
@ECHO OFF
SET /P NAME=Введите имя пользователя:
SET /P pass=Введите пароль:
ECHO Имя пользователя — %NAME% , Пароль — %PASS%
В командных файлах довольно часто требуется работать с частью значения, принимаемого переменной, для чего используются подстановочные значения:
переменная:строка1=строка2 — заменяет в принимаемом значении переменной строку1 на строку2
Следующий командный файл использует замену символа «точка» на символ «тире» в значении переменной, соответствующем текущей дате:
@ECHO OFF
set tm=%DATE%
ECHO Дата1 = %tm%
SET tm=%DATE:.=-%
ECHO Дата2 = %tm%
Для выделения части значения, принимаемого переменной, используется следующая конструкция:
x,y — где x — число пропускаемых символов от начала строки, а y — количество символов, используемых в качестве значения переменной.
Следующий пример использует отображение текущего времени без секунд и долей секунд (только первые 5 символов из стандартного значения переменной TIME):
@ECHO OFF
set tm=%TIME%
ECHO Время1 = %tm%
SET tm=%TIME:
0,5%
ECHO Время2 = %tm%
Если значение y ( длина ) не указана, то используется оставшееся до конца строки значение переменной. Если значение y отрицательно, то используется часть строки значения переменной от конца. Предыдущий пример можно изменить , указав, что в принимаемом значении времени отбрасываются 6 символов от конца:
@ECHO OFF
set tm=%TIME%
ECHO Время1 = %tm%
SET tm=%TIME:
Возможно использование число пропусков не задано, и используется отрицательное число, то принимаемое значение будет частью переменной от конца строки:
-10% — извлечет последние 10 символов переменной PATH
. Нулевое значение можно не указывать, сохраняя формат подстановки:
0,-2% эквивалентно %PATH:
При использовании переменных окружения в командных файлах существует определенное ограничение, связанное с тем фактом, что присваиваемое значение остается без изменения при его модификации внутри группы команд, задаваемой скобками, например в командах IF или FOR . Для обхода данного ограничения используется запуск командного процессора с параметром /V:ON и вместо знаков процента, для получения принимаемого переменной значения, используются восклицательные знаки. Кроме того, существует возможность использовать стандартный запуск командного процессора, но с локальным включением данного режима командой :
Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:
Setlocal EnableDelayedExpansion
@ECHO OFF
set VAR=before
if «%VAR%» == «before» (
set VAR=after
if «!VAR!» == «after» @echo Со знаком процента=%VAR% , Со знаком вопроса=!VAR!
)
Команда set VAR=after выполняется внутри подпрограммы, ограниченной скобками и, если убрать команду Setlocal EnableDelayedExpansion или не использовать для получения значения переменной VAR восклицательные знаки, ее значение останется старым ( тем, что было установлено до входа в подпрограмму ). Аналогичная же проблема наблюдается и тогда, когда значение переменной изменяется внутри цикла команды FOR . Например, для получения списка файлов текущего каталога такой командный файл не будет работать:
set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%
Значение переменной LIST внутри цикла изменено не будет. Для того, чтобы это произошло, командный файл нужно изменить следующим образом:
Setlocal EnableDelayedExpansion
set LIST=
for %%i in (*) do set LIST=!LIST! %%i
echo %LIST%
Теперь, значение переменной LIST внутри цикла FOR будет изменяться, последовательно принимая значения имен файлов, разделенных пробелом ( set LIST=!LIST! %%i )
Переменные окружения Windows
Переменные среды хранят информацию о среде операционной системы. Эта информация включает такие сведения, как путь к операционной системе, количество процессоров, используемых операционной системой, и расположение временных папок.
Переменные среды хранят данные, которые используются операционной системой и другими программами. Например, переменная среды WINDIR содержит местоположение установочного каталога Windows. Программы могут запрашивать значение этой переменной, чтобы определить, где находятся файлы операционной системы Windows.
Полный список переменных среды Windows
| Переменная | Тип | Описание |
|---|---|---|
| %ALLUSERSPROFILE% | Локальная (пользовательская) | Возвращает расположение файлов профилей общих для всех пользователей. |
| %APPDATA% | Локальная | Возвращает расположение, где приложение по умолчанию хранят данные. |
| %CD% | Локальная | Возвращает строку с текущей папкой. |
| %CMDCMDLINE% | Локальная | Возвращает точную строку команды, запустившую текущий Cmd.exe. |
| %CMDEXTVERSION% | Системная (на уровне всей машины) | Возвращает номер версии текущего Command Processor Extensions. |
| %COMPUTERNAME% | Системная | Возвращает имя компьютера. |
| %COMSPEC% | Системная | Возвращает точный путь до исполнимого файла командной оболочки. |
| %DATE% | Системная | Возвращает текущую дату. Использует такой же формат, как и команда date /t. Генерируется в Cmd.exe. |
| %ERRORLEVEL% | Системная | Возвращает код ошибки самой последней исполненной команды. Ненулевое значение говорит об ошибке. |
| %HOMEDRIVE% | Системная | Возвращает, какая буква диска локальной рабочей станции подключена к домашнему каталогу пользователя. Устанавливается в зависимости от значения домашнего каталога. Домашний каталог пользователя указан в Local Users and Groups («Локальные пользователи и группы»). |
| %HOMEPATH% | Системная | Возвращает полный путь домашней директории пользователя. Устанавливается на основе значения домашней директории. Домашняя пользовательская директория указана в Local Users and Groups. |
| %HOMESHARE% | Системная | Возвращает сетевой путь к общему домашнему каталогу пользователя. Устанавливается в зависимости от значения домашнего каталога. Домашний каталог пользователя указан в разделе «Локальные пользователи и группы». |
| %LOGONSEVER% | Локальная | Возвращает имя контроллера домена, который проверил текущий сеанс входа в систему. |
| %NUMBER_OF_PROCESSORS% | Системная | Указывает количество процессоров (ядер), установленных в компьютер. |
| %OS% | Системная | Возвращает имя операционной системы. Все ОС после Windows 2000 показывают имя операционной системы как Windows_NT. |
| %PATH% | Системная | Содержит список папок, в которых ищутся исполнимые файлы. |
| %PATHEXT% | Системная | Возвращает список расширений, которые операционная система расценивается как исполнимые. |
| %PROCESSOR_ARCHITECTURE% | Системная | Возвращает архитектуру чипа процессора. Примеры значений: x86, IA64, AMD64. |
| %PROCESSOR_IDENTFIER% | Системная | Возвращает описание процессора. |
| %PROCESSOR_LEVEL% | Системная | Возвращает номер модели процессора, установленного в компьютер. |
| %PROCESSOR_REVISION% | Системная | Возвращает номер ревизии процессора. |
| %PROMPT% | Локальная | Возвращает настройки приглашения командной строки для текущего интерпретатора. Генерируется в Cmd.exe. |
| %RANDOM% | Системная | Возвращает случайное целое число между 0 и 32767. Генерируется в Cmd.exe. |
| %SYSTEMDRIVE% | Системная | Возвращает диск, содержащий корневую директорию Windows (то есть это корень системы). |
| %SYSTEMROOT% | Системная | Возвращает расположение корневой директории Windows. |
| %TEMP% и %TMP% | Системная и пользовательская | Возвращает временные каталоги по умолчанию, которые используются приложениями, доступными для пользователей, вошедших в систему. Некоторые приложения требуют TEMP, а другие требуют TMP. |
| %TIME% | Системная | Возвращает текущее время. Использует такой же формат, как и команда time /t. Генерируется в Cmd.exe. |
| %USERDOMAIN% | Локальная | Возвращает имя домена, содержащего аккаунт пользователя. |
| %USERNAME% | Локальная | Возвращает имя пользователя, который в данный момент выполнил вход в систему. |
| %USERPROFILE% | Локальная | Возвращает расположение профиля текущего пользователя. |
| %WINDIR% | Системная | Возвращает расположение директории операционной системы. |
| %CommonProgramFiles% | Системная | Путь до папки с совместными файлами программ. |
| %ProgramFiles(x86)% | Системная | Папка с файлами 32-битных программ. |
| %CommonProgramW6432% | Системная | Путь до папки с совместными файлами программ. |
| %USERDOMAIN_ROAMINGPROFILE% | Локальная | Домен профиля. |
| %ProgramData% | Системная | Папка, в которой программы хранят данные. |
| %WT_PROFILE_ID% | Локальная | Идентификатор профиля. |
| %DriverData% | Системная | Папка хранения данных некоторых служб. |
| %ProgramW6432% | Системная | Каталог с файлами программ. |
| %PSModulePath% | Системная и пользовательская | Папки с модулями PowerShell. |
| %WSLENV% | ||
| %POWERSHELL_DISTRIBUTION_CHANNEL% | Системная и пользовательская | Канал распространения PowerShell. |
| %LOCALAPPDATA% | Локальная | Папка хранения данных программ, индивидуальная для каждого пользователя. |
| %ProgramFiles% | Системная | Папка с файлами программ. |
| %JAVA_HOME% | Системная | Путь в который установлена виртуальная машина Java. |
| %OneDrive% | Локальная | Путь до папки для хранения данных OneDrive. |
| %WT_SESSION% | Локальная | Идентификатор сессии. |
| %LOGONSERVER% | Локальная | Сервер, где был выполнен вход. |
| %PUBLIC% | Системная | Папка для публичного доступа. |
| %PROCESSOR_IDENTIFIER% | Системная | Описание процессора. |
| %CommonProgramFiles(x86)% | Системная | Путь для общих файлов 32-битных программ. |
Как использовать переменные окружения
Переменные окружения, содержащие путь до каталога, можно вводить в адресную строку проводника и любого менеджера файлов.
Узнать, установить и изменить значение переменной окружения можно в командной строке и в программах.
Переменные окружения в графическом интерфейсе
Чтобы увидеть и отредактировать переменные окружения в настройках, в строку поиска на панели задач введите «Изменение системных переменных среды» и кликните Enter.

В открывшемся окне «Свойства системы» нажмите на кнопку «Переменные среды».

Вы увидите переменные среды пользователя (верхняя половина открывшегося окна) и системные переменные (нижняя половина).

Здесь вы можете создать новые переменные, а также изменить или удалить существующие.
Сделанные здесь изменения являются постоянными и сохраняться после перезагрузки.
