Что такое environment variables
Что такое переменные среды Windows
Операционные системы и Windows не исключение имеют в своем составе особый механизм хранения различной информации, называемый переменными. Кто знаком с программированием прекрасно понимает, что это. Остальные могут представить себе это в виде записи имя_переменной=значение переменной среды. Например, запись username=Vasya означает, что переменная с именем username содержит значение Vasya.
При этом подразумевается, что имя переменной неизменно, а значение может изменяться с течением времени. Представим себе, что в переменной username хранится имя текущего пользователя Windows. Когда мы вошли в систему под именем Vasya, то в username оказалось соответствующее значение, однако если мы сменим пользователя на Ivan, то и значение изменится и username будет равно Ivan. Из-за этой возможности изменяться их и называют переменными.
Они оказываются чрезвычайно полезными при создании скриптов, работе в командной строке и адресной строке Проводника. В основном они содержат информацию из разряда имя компьютера, имя пользователя, домашняя папка пользователя, каталог куда установлена ОС, архитектура процессора, папки для временных файлов и так далее.
Таким образом эта информация дает представление о текущем окружении, то есть описывает среду, в которой происходит выполнение программы, отсюда и получили свое название переменные среды (environment variables) или по-другому переменные окружения.
В чем их практический смысл? Представьте себе, что вы создаете командный файл, в котором используется путь к домашней папке пользователя, причем он должен работать на любом компьютере. Как его прописать, если имя учетной записи заранее не известно, да и расположение папки тоже? Конечно, его можно выяснить в недрах ОС, но гораздо проще и компактней просто написать %USERPROFILE%. Система сама заботится о правильном значении, поэтому в таком варианте скрипт будет корректно работать везде.
Так же благодаря переменной path можно запускать программы без указания полных путей к исполняем файлам, что заметно упрощает использование компьютера.
Переменные среды Windows бывают нескольких видов:
Настройка переменных среды Windows
В операционной системе имеется заранее предопределенный набор переменных окружения Windows и можно создавать собственные. Для просмотра и управления ими можно воспользоваться графическим интерфейсом. В разных версиях Windows вид окон немного отличается, но принципиально все одинаково. Правда в Windows 10 управление реализовано более удобно, чем в 7 и более старых версиях.
Настройка переменных среды Windows в графическом интерфейсе
Чтобы иметь возможность просматривать и редактировать переменные окружения в Windows 10 нужно выполнить следующие действия.
Окно управления состоит из двух частей. В верхней представлены пользовательские переменные, а в нижней системные. Здесь можно просмотреть существующие, а также отредактировать, удалить или создать новые воспользовавшись соответствующими кнопками.
Чтобы создать переменную окружения нажимаем кнопку «Создать» в нужной части окна и вводим ее имя, значение и затем OK. Можно воспользоваться кнопкой «Обзор каталога» чтобы не вводить путь до нужной папки вручную.
Настройка переменных окружения Windows в командной строке
В Windows есть специальные команды, предназначенные для создания и редактирования переменных. Это set и setx принципиальная разница между которыми в том, что первая управляет ими только в текущем окне командной строки, а вторая изменяет их «навсегда» поскольку изменения сохраняются в реестре.
Для просмотра всех существующих переменных и их значений введите set без параметров.
Тут есть важный момент, который нужно понять, переменные среды считываются в момент запуска программы. Поэтому изменения, сделанные в графическом интерфейсе или командой setx не действуют на уже запущенные программы. Их придется закрыть и запустить снова. В то же время команда set влияет только на текущее окно или дочерние процессы.
Использование переменных среды Windows сильно упрощает и ускоряет использование компьютера опытными пользователями. Каким способом их использовать каждый решает самостоятельно.
Переменные среды
Содержание:
Переменные среды́ (ударение на «Ы») – специальные текстовые переменные в операционной системе, которые хранят, как правило, определённые настройки или системные пути. Также сущность имеет альтернативное название – «переменная окружения» (англ. «environment variable»).
Переменные среды в основном создаются сценариями оболочки операционной системы или самим пользователем. В Windows переменные окружения хранятся в реестре, а управляются через специальную оснастку в разделе «Свойства системы». Как и любая классическая переменная, переменная среды состоит из короткого названия, по которому к ней производится доступ, и значения, которое используется в различных операциях.
Большинство переменных окружения Windows хранят в себе адреса различных системных папок, к которым можно получить быстрый доступ из командной строки, сценария, штатного Проводника или любого продвинутого файлового менеджера. Зная хотя бы часть системных переменных и создавая собственные, Вы можете значительно автоматизировать работу с файлами на Вашем ПК. И наша статья расскажет как именно.
Что такое переменные окружения Windows
Хотите быстро открывать любые нужные Вам папки, запускать Командную строку из любой директории или создавать автоматические сценарии для перемещения файлов? Тогда Вам просто необходимо знать, что такое переменные среды!
Сегодняшняя статья, думаю, будет интересна, в первую очередь, продвинутым пользователям Windows. Хотя, в принципе, знать о предмете разговора не помешает никому. Речь идёт о такой сущности операционной системы как переменные средЫ (ударение на последнем слоге).
Исполняемой средой в Windows является оболочка Командной строки (CMD.EXE). Соответственно переменные эти будут работать в первую очередь в консоли. Однако, поскольку Командная строка поддерживается на уровне системы всеми штатными средствами Windows, переменные окружения будут также отлично работать, например, в Проводнике, в Планировщике заданий или в любых BAT-файлах. Это даёт широкий простор для их применения в сфере автоматизации рутинных процессов при работе с файлами.
Общие данные о переменных окружения
Переменные среды чаще всего разделяют на системные и локальные. Системные могут, в свою очередь, быть встроенными в Windows изначально (имеют наивысший приоритет) или добавлены различными установленными программами. Такие переменные доступны из любой учётной записи и хранятся в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.
Локальные переменные среды тоже могут создаваться программно, однако, часто их создают сами пользователи вручную. Такие переменные доступны только в рамках активной в данный момент учётной записи пользователя, а в реестре хранятся в ветках HKEY_CURRENT_USER\Environment и HKEY_CURRENT_USER\Volatile Environment.
Физически переменная окружения являет собой строковый или мультистроковый параметр реестра. Имя его одновременно является именем переменной, а значение, соответственно, её содержимым. В качестве содержимого может выступать любая текстовая информация, команды, пути к папкам или даже ссылки на другие переменные. В последнем случае имя переменной, на которую ссылаются, обрамляется с двух сторон символами «%»:
Кстати, вышеупомянутый способ обрамления имени переменной среды знаками процента используется для вызова её значения в окружении Windows. Например, если в Командной строке Вы хотите вывести текущую дату, Вы можете воспользоваться командой ECHO и переменной DATE в формате: «echo %date%» (без кавычек). Значения переменных можно произвольно комбинировать с любым текстом или значениями других переменных, при условии, что Вы их имена тоже заключите в конструкцию «%. %»:
Думаю, общее представление о том, что такое переменные среды у Вас уже есть, поэтому давайте углубимся в их изучение и рассмотрим более подробно.
Переменные среды Windows
Смотреть существующие переменные среды, как мы уже выяснили, можно в реестре. Однако, это не совсем удобно, поскольку они раскиданы по нескольким веткам. Гораздо проще ознакомиться с полным списком доступных переменных окружения через Командную строку. Для этого вызовите её (WIN+R – cmd – Enter) и введите команду SET без каких-либо дополнительных параметров:
Стоит сказать, что список здесь немного неполный, поскольку не содержит ряда встроенных системных переменных, вроде DATE, TIME, RANDOM и т.п. Начнём, пожалуй, с них.
Системные переменные среды
Локальные переменные среды
Если системные переменные окружения доступны всегда по всей системе, то локальные работают только в рамках конкретной учётной записи пользователя. Их количество может быть значительным, а состав отличаться даже для разных пользователей одного и того же ПК. Однако, есть ряд переменных, которые обычно присутствуют везде.
Создание и правка переменных среды
Как видим, переменных окружения уже изначально существует довольно много. Однако, это не значит, что Вы будете их использовать все и должны помнить наизусть. Более того, на практике Вам может недоставать каких-нибудь значений и Вы, возможно, захотите создать собственные переменные окружения. Благо, что в Windows для этого есть, как минимум, три штатных способа!
Создание переменных среды в Редакторе реестра
Как мы уже говорили, переменные среды хранятся в реестре Windows. Соответственно, там же мы их можем создавать и править. Это не самый правильный способ, но, тем не менее, такая возможность есть.
Чтобы создать, к примеру, локальную переменную окружения откройте Редактор реестра (WIN+R – regedit – Enter) и в ветке HKEY_CURRENT_USER\Environment создайте новый параметр расширяемого строкового, строкового или мультистрокового типа с нужным именем и значением. К примеру, создадим переменную MYNAME со значением «Руслан»:
Чтобы переменная стала доступна в системе нужно либо перезагрузить Windows, либо только сам Проводник. Последнее можно довольно просто сделать при помощи Диспетчера задач (CTRL+SHIFT+ESC). Достаточно только найти процесс «Проводник» (или explorer.exe) и перезапустить его (либо, в более ранних версиях Windows, снять задачу и создать её заново):
После перезапуска оболочки Windows добавленная переменная будет доступна во всех системных компонентах. Проверить же доступность можно, как всегда, в Командной строке через команду ECHO (echo %myname%).
Создание переменных среды в Командной строке
Если Вы уже привыкли к работе в консоли Windows, то создавать переменные среды Вы сможете и прямо в ней. Для создания и правки переменных в Командной строке используется уже знакомая нам команда SET. Только, если для вывода списка переменных мы использовали её без каких-либо параметров, то теперь нам потребуется дополнить команду именем переменной и её значением. Например, создать переменную MYSURNAME со значением «Тертышный» можно так: SET MYSURNAME=Тертышный:
Проверить доступность переменной можно не только уже знакомой командой ECHO но и при помощи всё той же SET с указанием имени переменной: SET MYSURNAME. Если же Вы к предыдущей команде припишите знак «=», то получившаяся функция удалит переменную окружения с указанным именем, например: SET MYSURNAME= (удалит переменную MYSURNAME).
При создании переменной окружения прямо в реестре она там отображалась, но для доступа к ней требовался перезапуск среды. При создании же в консоли перезапуск не нужен. Новая переменная становится доступной сразу после объявления. Правда, она нигде не сохраняется на постоянной основе и использовать её можно только в текущем сеансе Командной строки.
Чтобы сохранить такую переменную в реестр Вам потребуется выполнить манипуляции с командой REG. Например, для сохранения переменной в виде локальной команда будет следующей: REG ADD HKCU\Environment /v MYSURNAME /t REG_EXPAND_SZ /d Тертышный или REG ADD HKCU\Environment /v MYSURNAME /t REG_EXPAND_SZ /d %MYSURNAME%:
Создание переменных среды через Свойства системы
Наиболее безопасным и удобным для простого пользователя, на мой взгляд, является работа с переменными среды через одноимённую оснастку. Чтобы получить к ней доступ вызовите «Свойства системы» (контекстное меню значка «Компьютер» – «Свойства»), перейдите на вкладку «Дополнительно» и нажмите кнопку «Переменные среды» в самом низу:
В открывшемся окне можно управлять некоторыми уже существующими системными и локальными переменными окружения, а также создавать новые. В принципе, здесь ничего сложного нет – всё весьма наглядно. Для создания новой переменной достаточно заполнить всего два поля с её именем и значением. Как и в случае с добавлением переменной через реестр, здесь также требуется перезапуск среды для полноценной работы.
Примеры использования переменных среды
Наконец-то мы разобрались (надеюсь :)) с принципами создания и изменения переменных среды и сейчас рассмотрим несколько практических примеров их применения. Скажу сразу, что применений Вы можете придумать сами большое множество. А, если Вы понимаете синтаксис BAT-файлов, то возможности перед Вами откроются весьма обширные.
Одной из самых полезных системных переменных окружения, на мой взгляд, является %COMSPEC%. Если взглянуть на её значение, то мы увидим, что она запускает Командную строку. Однако, если Вы введёте данную переменную в адресной строке открытой в данный момент папки, то консоль автоматически откроется из этой директории. Такой «фокус» очень удобен, если Вы работаете с консольными приложениями и не хотите каждый раз вводить вручную адрес папки с исполняемыми файлами:
Часто при работе с консолью требуется получить путь или имя рабочей папки. Чтобы не вводить его, опять же, вручную, намного удобнее воспользоваться системной переменной среды %CD%. Данная переменная, как мы знаем, хранит путь активной в данный момент директории.
Переменные, хранящие в своём значении пути, довольно удобно использовать для быстрого перехода к нужным папкам в том же Проводнике. Например, чтобы открыть директорию временных файлов пользователя достаточно ввести в адресную строку %TMP%, а для доступа к папке Windows – %WINDIR% и нажать Enter. Здесь можете создать и свои переменные, например, %DWNLD% для открытия папки загрузок, %DSK% для Рабочего стола и т.п.
Рассмотрим популярную практическую задачу, использующую вышеупомянутый тип переменных – очистка каталога с временными файлами. Как мы знаем, часто различные программы не «убирают» за собой «мусор». В результате этого директория временных файлов медленно но верно увеличивается в объёме. Если Вам хочется автоматизировать её очистку, создайте BAT-файл следующего содержания:
Первая команда удалит каталог временных файлов со всеми подпапками, не спрашивая Вашего подтверждения. Вторая же заново создаст его. Стоит, однако, заметить, что, если Вы запустите такой «батник» во время работы системы, то папка TEMP полностью может и не удалиться, поскольку в ней могут находится ресурсы, используемые активными программами. В принципе, это не смертельно, но консоль выдаст ошибки.
Если же хотите чтобы всё прошло безупречно, лучше запускать очистку при старте Windows, закинув BAT-файл в папку «Автозагрузка» (путь обычно: %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup). Таким образом очистка будет происходить автоматом при каждом запуске системы и не будет стопориться активными процессами, поскольку они ещё не запущены.
В ряде случаев полезной бывает и переменная %RANDOM%. По умолчанию она генерирует случайное число от 0 до 32767. Однако, диапазон можно ограничить приписав после переменной конструкцию » %% число», где «число» – максимальная нужная величина диапазона. Например, получить число от 0 до 10 можно так: «ECHO %RANDOM% %% 11» (в диапазоне всего 11 чисел, включая 0). Немного «заморочившись» можно даже написать простенькую игру «Угадай число» в виде следующего BAT-файла:
SET /a GUESS=%RANDOM% %% 101
SET /p «try=Ваше число: «
if %try% LSS %GUESS% (echo Загаданное число больше.& goto begin)
if %try% GTR %GUESS% (echo Загаданное число меньше.& goto begin)
if %try%==%GUESS% echo Вы угадали!& pause
Вышеприведённый код реализует игру на угадывание числа от 0 до 100, которое получается как раз из системной переменной окружения %RANDOM%. Для нормального отображения кириллицы набор команд нужно сохранить в виде BAT-файла с кодировкой OEM 866 или DOS (в разных Блокнотах она обозначена по-разному). Быстро запустить его на выполнение можно из любой папки при помощи вышеупомянутого способа с использованием переменной %COMSPEC% и ввода имени BAT-файла:
Выводы
Несмотря не то, что переменные среды в большинстве случаев используют лишь системные администраторы и программисты, они могут здорово пригодиться и простым пользователям! Зная всего несколько из них и умея создавать собственные, Вы без особых проблем сможете, как минимум, получать быстрый доступ к любым нужным папкам.
Если же Ваш интерес будет большим, нежели просто попробовать, что это такое, то Вы можете пойти дальше и писать уже собственные пакетные файлы, автоматизирующие процессы удаления, перемещения и создания файлов с нужными Вам данными. И, пускай Командная строка не так функциональна как, скажем, консоль Linux bash, в умелых руках она может творить буквально чудеса! Не верите? Попробуйте сами!
about_Environment_Variables
Краткое описание
описывает, как получить доступ к переменным среды Windows в PowerShell.
Подробное описание
Переменные среды хранят сведения о среде операционной системы. Эти сведения включают в себя такие сведения, как путь операционной системы, количество процессоров, используемых операционной системой, и расположение временных папок.
Переменные среды хранят данные, используемые операционной системой и другими программами. например, WINDIR переменная среды содержит расположение каталога установки Windows. программы могут запрашивать значение этой переменной, чтобы определить, где находятся Windows файлы операционной системы.
PowerShell может обращаться к переменным среды и управлять ими на любой из поддерживаемых платформ операционной системы. Поставщик среды PowerShell упрощает этот процесс, облегчая просмотр и изменение переменных среды.
Переменные среды, в отличие от других типов переменных в PowerShell, наследуются дочерними процессами, такими как локальные фоновые задания и сеансы, в которых выполняются элементы модуля. Это делает переменные среды наиболее подходящими для хранения значений, необходимых как в родительских, так и в дочерних процессах.
Использование и изменение переменных среды
в Windows переменные среды могут быть определены в трех областях:
Можно отображать и изменять значения переменных среды без использования командлета с помощью переменных синтаксиса в поставщике среды. Чтобы отобразить значение переменной среды, используйте следующий синтаксис:
Например, чтобы отобразить значение WINDIR переменной среды, введите в командной строке PowerShell следующую команду:
Для внесения изменений в переменные на уровне компьютера необходимо также иметь разрешение. Если вы попытаетесь изменить значение без достаточных разрешений, команда завершится ошибкой, и в PowerShell отобразится сообщение об ошибке.
Можно изменить значения переменных без использования командлета, используя следующий синтаксис:
Например, чтобы добавить ;c:\temp к значению Path переменной среды, используйте следующий синтаксис:
В Linux или macOS двоеточие ( : ) в команде отделяет новый путь от пути, расположенного перед ним в списке.
В этой команде значение заключается в круглые скобки, чтобы интерпретироваться как единое целое.
Управление переменными среды
PowerShell предоставляет несколько различных методов для управления переменными среды.
Использование поставщика среды
Чтобы отобразить свойства и методы объекта, представляющего переменную среды в PowerShell, используйте Get-Member командлет. Например, чтобы отобразить методы и свойства всех объектов на Env: диске, введите:
Поставщик среды PowerShell позволяет получить доступ к переменным среды на диске PowerShell ( Env: диск). Этот диск выглядит примерно так же, как диск файловой системы. Чтобы открыть Env: диск, введите:
Используйте командлеты Content, чтобы получить или задать значения переменной среды.
Можно просмотреть переменные среды на Env: диске с любого другого диска PowerShell, а также можно перейти на Env: диск, чтобы просмотреть и изменить переменные среды.
Использование командлетов Item
При ссылке на переменную среды введите Env: имя диска, за которым следует имя переменной. Например, чтобы отобразить значение COMPUTERNAME переменной среды, введите:
Чтобы отобразить значения всех переменных среды, введите:
Так как переменные среды не имеют дочерних элементов, выходные данные Get-Item и Get-ChildItem одинаковы.
По умолчанию PowerShell отображает переменные среды в том порядке, в котором они извлекаются. Чтобы отсортировать список переменных среды по имени переменной, необходимо передать выходные данные Get-ChildItem команды в Sort-Object командлет. Например, с любого диска PowerShell введите:
Вы также можете войти на Env: диск с помощью Set-Location командлета:
Если вы используете Env: диск, можно опустить Env: имя диска из пути. Например, чтобы отобразить все переменные среды, введите:
Чтобы отобразить значение COMPUTERNAME переменной в пределах Env: диска, введите:
Сохранение изменений в переменных среды
Кроме того, можно добавить или изменить переменные среды в профиле PowerShell. Этот метод работает для любой версии PowerShell на любой поддерживаемой платформе.
Использование методов System. Environment
В следующем примере метод GetEnvironmentVariable используется для получения параметра компьютера, PSModulePath а метод SetEnvironmentVariable — для добавления C:\Program Files\Fabrikam\Modules пути к значению.
Дополнительные сведения о методах класса System. Environment см. в разделе методы среды.
Переменные среды PowerShell
Функции PowerShell могут использовать переменные среды для хранения настроек пользователя. Эти переменные работают подобно переменным предпочтений, но они наследуются дочерними сеансами сеансов, в которых они созданы. Дополнительные сведения о переменных предпочтений см. в разделе about_Preference_Variables.
Ниже перечислены переменные среды, в которых хранятся настройки.
PSExecutionPolicyPreference
Хранит политику выполнения, заданную для текущего сеанса. Эта переменная среды существует только в том случае, если задана политика выполнения для одного сеанса. Это можно сделать двумя разными способами.
псмодулеаналисискачепас
PowerShell обеспечивает контроль над файлом, используемым для кэширования данных о модулях и их командлетах. Кэш считывается при запуске во время поиска команды и записывается в фоновом потоке после импорта модуля.
Расположение кэша по умолчанию:
Если обнаружение команд работает неправильно, например, в IntelliSense отображаются несуществующие команды, можно удалить файл кэша. Кэш создается повторно при следующем запуске PowerShell.
Чтобы изменить расположение кэша по умолчанию, задайте переменную среды перед запуском PowerShell. Изменения этой переменной среды влияют только на дочерние процессы. Значение должно быть полным путем (включая имя файла), на создание и запись файлов по которому у среды PowerShell есть разрешение.
Чтобы отключить файловый кэш, укажите в качестве этого значения недопустимое расположение, например:
псдисаблемодулеаналисискачеклеануп
Установка этой переменной среды вступает в силу немедленно в текущем процессе.
PSModulePath
$env:PSModulePath Переменная среды содержит список расположений папок, в которых выполняется поиск модулей и ресурсов.
Дополнительные сведения см. здесь: about_PSModulePath.
POWERSHELL_UPDATECHECK
Дополнительные сведения см. в разделе about_Update_Notifications.
POWERSHELL_TELEMETRY_OPTOUT
Дополнительные сведения см. в разделе about_Telemetry.
Другие переменные среды, используемые PowerShell
Сведения о пути
пасекст
$env:PATHEXT переменная содержит список расширений файлов, которые Windows рассматриваются как исполняемые файлы. Когда файл скрипта с одним из перечисленных расширений выполняется из PowerShell, сценарий выполняется в текущей консоли или сеансе терминала. Если расширение файла отсутствует в списке, сценарий выполняется в новом сеансе консоли.
на платформах, отличных от Windows, PowerShell использует следующие переменные среды XDG, как определено в спецификации базового каталога XDG.
Функции терминала
Начиная с PowerShell 7,2, можно использовать следующие переменные среды для управления функциями виртуальных терминалов, такими как escape-последовательности ANSI, которые выделяют выходные данные. Поддержку escape-последовательностей ANSI можно отключить с помощью переменных среды TERM или NO_COLOR.
ТЕРМИН