Всё, что нужно знать для просмотра, создания, редактирования и управления системными и пользовательскими переменными среды — от графического интерфейса до PowerShell.
Переменные среды — это именованные пары «ключ — значение», хранимые операционной системой и содержащие конфигурационные данные, которые используются программами, скриптами и самой командной оболочкой. Представьте их как глобальное хранилище настроек, доступное любому запущенному процессу — без необходимости «зашивать» пути или значения прямо в код.
Например, всем известная переменная PATH сообщает Windows, где искать исполняемый файл, когда вы вводите команду в командной строке. Вместо того чтобы каждый раз набирать C:\Windows\System32\notepad.exe, достаточно написать notepad — потому что C:\Windows\System32 уже перечислен в PATH.
Переменные среды являются неотъемлемой частью Windows с версии NT 3.1, и их поведение в Windows 10 и Windows 11 практически идентично. Диалоговые окна графического интерфейса немного отличаются из-за визуального обновления Windows 11, однако расположение ключей реестра, правила наследования и инструменты командной строки работают совершенно одинаково.
Разработчики, системные администраторы и опытные пользователи используют переменные среды для широкого круга задач: хранения конфиденциальных данных вроде API-ключей за пределами исходного кода, настройки поведения приложений во время выполнения без перекомпиляции, создания переносимых скриптов, работающих на любой машине, и определения путей установки таких инструментов, как Python, Java, Node.js и Git.
Windows различает четыре области действия переменных среды. Понимание области крайне важно: переменная, определённая на одном уровне, может перекрывать, перекрываться или быть полностью невидимой для другого уровня.
Задаются для конкретной учётной записи. Хранятся в HKCU\Environment реестра. Доступны только процессам, запущенным от имени этого пользователя. Имеют приоритет над переменными компьютера с тем же именем (кроме PATH).
Применяются ко всем пользователям компьютера. Хранятся в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Для изменения требуются права администратора.
Существуют только во время выполнения одного процесса и его дочерних процессов. Устанавливаются командой set в CMD или через $env: в PowerShell. При завершении процесса изменения сбрасываются.
Особое подмножество, хранящееся в HKCU\Volatile Environment. Создаются заново при каждом входе в систему (например, SESSIONNAME, LOGONSERVER). Теряются при выходе из сеанса, недоступны для ручного редактирования.
Для большинства переменных переменные пользователя имеют приоритет над системными переменными при совпадении имён. Главное исключение — PATH: Windows объединяет системный PATH и пользовательский PATH (сначала системный, затем пользовательский), так что оба вносят вклад в итоговое значение, которое видит любой запущенный процесс.
Существует несколько способов открыть диалоговое окно «Переменные среды». Ниже перечислены наиболее надёжные методы, работающие как в Windows 10, так и в Windows 11.
Win + R, введите sysdm.cpl и нажмите Enter.Win + S, чтобы открыть поиск.Win + R, чтобы открыть диалоговое окно «Выполнить».rundll32 sysdm.cpl,EditEnvironmentVariables и нажмите Enter.rundll32 sysdm.cpl,EditEnvironmentVariables как ярлык на рабочем столе, если вы часто редактируете переменные среды. Это самый быстрый однокликовый путь к диалогу на любом компьютере с Windows 10/11.
Командная строка обеспечивает быстрый и автоматизируемый доступ к значениям переменных среды без открытия каких-либо графических диалоговых окон.
CMD — вывести все переменныеset
CMD — вывести конкретную переменнуюecho %VARIABLE_NAME%
echo %PATH%
echo %USERNAME%
CMD — отфильтровать переменные по префиксуset APP_
Команда set без аргументов выводит все переменные среды, доступные в текущем процессе. Команда set ПРЕФИКС (без знака равенства) выводит все переменные, чьи имена начинаются с этого префикса — удобно для быстрой проверки всех переменных, связанных с JAVA_ или PYTHON.
PowerShell — вывести все переменныеGet-ChildItem Env:
PowerShell — прочитать конкретную переменную$env:PATH
$env:USERNAME
$env:APPDATA
PowerShell — фильтрация и форматированиеGet-ChildItem Env: | Where-Object { $_.Name -like "APP_*" }
Get-ChildItem Env: | Sort-Object Name | Format-Table -AutoSize
PowerShell — читать постоянную переменную пользователя из реестра[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "User")
[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "Machine")
MY_APP_ROOT) и Значение переменной (например, C:\MyApp).CMD — установить переменную для текущего сеансаset MY_VARIABLE=ПриветМир
set APP_ENV=production
CMD — удалить переменную из текущего сеансаset MY_VARIABLE=
CMD — создать постоянную переменную пользователяsetx MY_VARIABLE "ПриветМир"
CMD — создать постоянную системную переменную (требуются права администратора)setx MY_VARIABLE "ПриветМир" /M
setx записывает значение в реестр и влияет на последующие процессы, но не обновляет среду текущего сеанса CMD. Для просмотра нового значения нужно открыть новое окно CMD. Кроме того, setx молча обрезает значения длиннее 1 024 символов — распространённая ловушка при добавлении записей в PATH.
Переменная PATH — безусловно, самая важная и наиболее часто изменяемая переменная среды. Это список каталогов, разделённых точкой с запятой, которые Windows просматривает по порядку при запуске программы без указания полного пути.
В Windows 10 и 11 есть специальный редактор PATH, отображающий каждую запись на отдельной строке — это значительно удобнее, чем вручную редактировать длинную строку с разделителями.
Path в блоке переменных пользователя или системы.PowerShell — постоянно добавить в PATH пользователя$current = [System.Environment]::GetEnvironmentVariable("Path", "User")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "User")
PowerShell — добавить в системный PATH (запустить от имени администратора)$current = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "Machine")
.NET-класс [System.Environment] в PowerShell и провайдер Env: обеспечивают полный и автоматизируемый контроль над всеми областями действия переменных среды.
PowerShell — установить постоянную переменную пользователя[System.Environment]::SetEnvironmentVariable("API_KEY", "abc123xyz", "User")
PowerShell — установить постоянную системную переменную (нужен администратор)[System.Environment]::SetEnvironmentVariable("DB_HOST", "prod-db-01", "Machine")
PowerShell — удалить переменную пользователя[System.Environment]::SetEnvironmentVariable("API_KEY", $null, "User")
PowerShell — установить переменную только для текущего сеанса$env:MY_TEMP_VAR = "временное_значение"
Remove-Item Env:MY_TEMP_VAR
PowerShell — экспортировать все переменные пользователя в файлGet-ChildItem Env: | Export-Csv -Path "$HOME\env_backup.csv" -NoTypeInformation
PowerShell — импортировать переменные из файла .env (распространённый шаблон)Get-Content ".env" | ForEach-Object {
if ($_ -match "^([^#=]+)=(.*)$") {
[System.Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), "User")
}
}
WM_SETTINGCHANGE, чтобы Проводник и новые окна терминала подхватили изменения без выхода из системы. Этот приём используют многие установщики, например Chocolatey и Scoop.
Windows поставляется с богатым набором предустановленных переменных среды. Знание этих переменных экономит время и делает скрипты переносимыми между разными машинами и пользователями.
| Переменная | Типичное значение | Описание |
|---|---|---|
%USERNAME% |
ivan.petrov |
Имя учётной записи текущего пользователя. |
%USERPROFILE% |
C:\Users\ivan.petrov |
Полный путь к домашней папке текущего пользователя. |
%APPDATA% |
C:\Users\ivan.petrov\AppData\Roaming |
Папка для перемещаемых данных приложений текущего пользователя. |
%LOCALAPPDATA% |
C:\Users\ivan.petrov\AppData\Local |
Папка для локальных (неперемещаемых) данных приложений. |
%TEMP% / %TMP% |
C:\Users\ivan.petrov\AppData\Local\Temp |
Каталог временных файлов. Можно периодически очищать без последствий. |
%SYSTEMROOT% |
C:\Windows |
Корневой каталог установки Windows. |
%SYSTEMDRIVE% |
C: |
Буква системного диска. |
%WINDIR% |
C:\Windows |
Псевдоним для %SYSTEMROOT%. Используется старыми приложениями. |
%PROGRAMFILES% |
C:\Program Files |
Стандартная папка установки 64-разрядных программ. |
%PROGRAMFILES(X86)% |
C:\Program Files (x86) |
Стандартная папка установки 32-разрядных программ в 64-разрядной Windows. |
%COMPUTERNAME% |
DESKTOP-ABC123 |
NetBIOS-имя компьютера. |
%OS% |
Windows_NT |
В современной Windows всегда Windows_NT. Используется в старых bat-скриптах для определения ОС. |
%PROCESSOR_ARCHITECTURE% |
AMD64 |
Архитектура процессора текущего процесса (AMD64, x86, ARM64). |
%PATH% |
(объединённый список) | Список каталогов через точку с запятой для поиска исполняемых файлов. |
%PATHEXT% |
.COM;.EXE;.BAT;… |
Расширения файлов, которые Windows считает исполняемыми при поиске в PATH. |
%PUBLIC% |
C:\Users\Public |
Общая папка, доступная всем пользователям компьютера. |
Любую из этих переменных можно использовать в адресной строке Проводника, в диалоге «Выполнить» (Win+R), в bat-скриптах и в PowerShell — обернув в знаки процента (%ПЕРЕМЕННАЯ%) или используя синтаксис $env:ПЕРЕМЕННАЯ.
Изменения не применяются в открытых приложениях. Изменения переменных среды считываются только при запуске нового процесса. Закройте и снова откройте приложение, терминал или IDE. Выход из системы и повторный вход гарантирует, что все процессы получат обновлённые значения.
Команда не найдена после добавления в PATH. Сначала проверьте корректность добавления через echo %PATH% в новом окне CMD. Ищите опечатки, пропущенные обратные слэши или лишние пробелы. Убедитесь, что вы редактировали правильную область (пользовательскую или системную).
PATH выглядит обрезанным — часть записей отсутствует. Причина — ограничение в 1 024 символа в старой команде setx или устаревших инструментах реестра. Используйте графический редактор PATH или метод [System.Environment] в PowerShell, который поддерживает значения до 32 767 символов (лимит реестра Windows).
Системные переменные не видны текущему пользователю. Проверьте оба раздела — пользовательский и системный — в диалоге «Переменные среды», или выполните set в CMD, который показывает объединённый результат. Если системная переменная по-прежнему не отображается, проверьте групповую политику — она может перекрывать или скрывать переменные.
Приложение игнорирует переменную среды. Некоторые приложения кешируют переменные среды при запуске и не перечитывают их во время работы. Перезапустите приложение. Для некоторых приложений переменная должна быть задана ещё до запуска службы, которая их инициализирует — в таком случае может потребоваться перезагрузка системы.
set > "%USERPROFILE%\Desktop\env_backup.txt" в CMD. Это даст вам точку для восстановления, если что-то пойдёт не так.
PATH, значение которого объединяется из обеих. Если вы единственный пользователь с правами администратора, практическая разница невелика; для общих компьютеров или управляемых сред системные переменные — правильный выбор для общемашинных настроек.
Path в переменных пользователя, нажмите Изменить, затем Создать и вставьте каталог (например, C:\Python312 и C:\Python312\Scripts для Python или C:\Program Files\nodejs для Node.js). Откройте новое окно CMD и введите python --version или node --version для проверки.
C:\Program Files\...). При использовании такой переменной в CMD оберните раскрытие в кавычки: "%МОЙ_ПУТЬ%". Имена переменных должны быть буквенно-цифровыми с символами подчёркивания — избегайте пробелов и спецсимволов в именах. Не включайте буквальные кавычки в значение переменной через графический интерфейс: они сохранятся как есть и могут вызвать непредсказуемое поведение при раскрытии переменной в скрипте.
%PATH%, %path% и %Path% ссылаются на одну и ту же переменную. Это отличает Windows от Linux/macOS, где PATH и path были бы двумя разными переменными. По соглашению имена переменных среды Windows пишутся ЗАГЛАВНЫМИ БУКВАМИ, но это лишь стилистическая традиция.
МОЁПРИЛОЖЕНИЕ_API_KEY. Учтите, что переменные среды хранятся в реестре Windows в открытом виде — они не зашифрованы. Любой процесс, запущенный от имени вашей учётной записи, может их прочитать. Для повышения безопасности рассмотрите Диспетчер учётных данных Windows, Azure Key Vault или инструменты наподобие direnv в сочетании с файлами .env, исключёнными из системы контроля версий. Никогда не фиксируйте в репозиториях переменные среды, содержащие секреты.
REG_EXPAND_SZ (используемого для расширяемых переменных вроде PATH). Однако устаревшая команда setx молча обрезает значения длиннее 1 024 символов — известное ограничение. Для безопасного управления длинными значениями (особенно PATH) всегда используйте графический редактор или метод [System.Environment]::SetEnvironmentVariable() в PowerShell, которые взаимодействуют с реестром напрямую без этого ограничения.
Переменные среды — фундаментальная часть конфигурации Windows: умение работать с ними делает вас значительно продуктивнее как разработчика, системного администратора или опытного пользователя. Используйте графический редактор для наглядного и безопасного управления PATH; используйте API [System.Environment] в PowerShell для автоматизации с контролем области действия и без ограничений по длине; используйте set/$env: для временных значений текущего сеанса, не засоряющих системный реестр.
Как в Windows 10, так и в Windows 11 базовые механизмы идентичны — отличается лишь внешний вид. Как только вы разберётесь в разнице между пользовательской и системной областями, в поведении объединения PATH и в принципах наследования процессами, вы редко столкнётесь с проблемами, которые нельзя диагностировать и устранить за несколько минут.