Переменные среды Windows. Настройка системной переменной PATH Значение переменной path

Попробуйте в окне «Выполнить» (Win + R) ввести wmplayer и нажать Enter — откроется Windows Media Player. Теперь сделайте то же самое в командной строке. Проигрыватель не запустится, потому что не найден путь к нему! Почему так происходит?

Читатель блога Андрей поинтересовался по почте, в каких случаях для запуска исполняемых файлов не требуется вводить полный путь к ним. Вопрос показался мне элементарным, и я кратко предложил читателю обратить внимание на переменную PATH.

Переменная PATH

Переменная среды PATH содержит пути, в которых Windows при выполнении команды автоматически ищет исполняемые файлы (EXE, CMD, VBS и т.д.). Изначально в переменную внесены только основные системные расположения, поэтому программы из папок Windows и System32 можно запускать, не указывая полный путь.

Как посмотреть содержимое переменной PATH

Некоторые программы при установке прописывают туда путь к своей папке, в чем вы наверняка убедитесь, выполнив в консоли команду path , показывающей системные и пользовательские переменные вместе.

Когда исполняемый файл находится в одном из расположений, известных Windows, вводить полный путь к файлу необязательно. Я использую это свойство операционной системы, чтобы быстро запускать любимые , утилиты Nirsoft и другие программы из своего сундучка (на рисунке видно, что в PATH добавлена папка Tools).

Как добавить свои пути к переменной PATH

Вы можете добавить собственные пути, изменив системную переменную PATH, либо создав пользовательскую переменную с таким же именем. Разницу между типами переменных я объяснял в рамках одной из викторин . Там же рассказывается, как изменять переменные среды в графическом интерфейсе . Обратите внимание, что пути разделяются точкой с запятой.

Можно быстро добавить свои пути в PATH из командной строки с помощью утилиты setx , входящей в состав Windows 7. Ниже приводится пример добавления пути C:\myfolder в системную переменную PATH (командная строка должна быть запущена от имени администратора).

For /f "tokens=2*" %a In ("Reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path") Do Set "systempath=%b" set newpath=%systempath%;C:\myfolder1 setx /m path "%newpath%"

Сначала с помощью команды reg считывается список путей из системной переменной PATH, хранящейся в реестре. Затем команда set задает переменную newpath с нужным путем в рамках текущей сессии командной строки, а команда setx /m делает новый путь постоянным для системной переменной (параметр /m ).

Пользовательскую переменную можно задать без прав администратора, применив аналогичный подход. Добавление нового пути к имеющейся пользовательской переменной PATH осуществляется так:

For /f "tokens=2*" %a In ("Reg query "HKCU\Environment" /v Path") Do Set "userpath=%b" set newpath=%userpath%;C:\myfolder2 setx path "%newpath%"

Учтите, что код выше рассчитан на выполнение в командной строке. В командном файле (CMD) символы процента в первой строке должны быть двойными.

Строго говоря, здесь можно было обойтись и без setx , поскольку reg может не только считывать данные из реестра, но и записывать их туда. Но во многих случаях с setx проще работать за счет более компактного синтаксиса.

Конечно, я не расписывал все это так подробно для Андрея, а просто задал ему направление. Однако на следующий день он написал мне, что все это знал (я — посредственный телепат:) и задал вопрос, которым я начал сегодняшний рассказ. Это было уже интереснее, и я пообещал раскрыть тему в блоге!

Раздел реестра App Paths

Действительно, не указывая полный путь, можно запустить некоторые стандартные программы Windows из окна «Выполнить», но не из командной строки. Помимо проигрывателя Windows Media, это, например, Paint (mspaint ) и Wordpad (wordpad ). То же самое верно и для приложений MS Office – проверьте команду excel или winword !

Разница между окном «Выполнить» и командной строкой заключается в том, что оболочка Windows (explorer) обладает более широкими возможностями, чем консольный интерпретатор команд. В данном случае все дело в функции ShellExecuteEx , которой снабжена оболочка. Когда вы запускаете исполняемый файл без указания полного пути к нему, функция выполняет поиск в:

  • текущей папке
  • папках Windows и System32
  • разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

Как работает раздел App Paths

Давайте посмотрим на работу App Paths на примере Windows Media Player.

  • создан подраздел с псевдонимом исполняемого файла (в данном случае – это wmplayer.exe )
  • в параметре По умолчанию указан полный путь к файлу. Если в пути к файлу используется переменная, параметр должен быть расширяемым строковым (REG_EXPAND_SZ). Указывая абсолютный путь, можно обойтись обычным строковым параметром (REG_SZ).
  • в параметре Path задана рабочая папка программы

Работает это очень просто. Вы вводите псевдоним файла в окне «Выполнить» или адресной строке проводника, а система автоматически смотрит в указанном пути.

Как ускорить свою работу с помощью App Paths

Этим разделом реестра можно пользоваться для быстрого запуска программ, ярлыки которых не нужны вам в панели задач или на рабочем столе. Например, для поиска и замены в текстовых файлах я применяю программу BKReplacem (replacem.exe), у которой своя папка внутри папки PortableSoft. В разделе App Paths я создал подраздел bkr.exe и указал полный путь к утилите. Теперь ее запуск сводится к выполнению bkr в окне «Выполнить».

Кстати, не забывайте заключать в кавычки пути, содержащие пробелы. И, надеюсь, вы уже догадались, что можно сократить команду до одной буквы. Продолжая этот пример, я мог бы создать подраздел b.exe. Вообще, у программы может быть сколько угодно псевдонимов, как вы увидите чуть ниже.

Еще одно применение, которое я нашел для App Paths, это запуск cmd.exe с полными правами. Я давно обхожусь без запроса UAC, благодаря запуску командной строки из планировщика заданий . Создав подраздел cmda.exe, я указал в нем путь к командному файлу, выполняющему задание.

В нем всего одна строка:

Schtasks /run /tn CMD_Admin

Теперь достаточно ввести в окно «Выполнить» команду cmda , чтобы открыть командную строку от имени администратора.

Что интересного можно найти в разделе App Paths

Во-первых, я уверен, что вы найдете там многие из установленных у вас программ. Вместо того чтобы прописывать путь к своей папке в переменную PATH, программы регистрируют свой исполняемый файл в разделе App Paths, следуя рекомендациям Microsoft.

Во-вторых, там есть подразделы WORDPAD.EXE и WRITE.EXE , причем оба ведут к файлу wordpad.exe.

Программа Write, входившая в состав первых операционных систем Microsoft, в Windows 95 была заменена на WordPad. Вы также найдете подраздел pbrush.exe , ссылающийся на mspaint, лежащий в System32.

Программ Write и Paintbrush нет в Windows уже лет 15, однако упоминание о них до сих пор содержится в системе! И это подводит нас к разговору о том, когда и зачем в Windows ввели раздел App Paths.

История App Paths

Раздел App Paths появился в Windows 95 в качестве противоядия от засорения пути PATH, который задавался в файле autoexec.bat . Программы традиционно добавляли туда пути к своим папкам, как это до сих пор иногда делается с одноименной переменной среды. При загрузке системы файл считывался, а программы оказывались в системном пути.

Кстати, старый способ autoexec.bat до сих пор работает, позволяя запускать исполняемые файлы без указания пути, хотя использовать его уже нет смысла.

Основная проблема для разработчиков состояла в том, что найти в autoexec.bat правильную строку SET PATH было нетривиальной задачей. При этом нельзя было вставлять свою строку в начало файла, поскольку другая команда ниже могла переопределить переменную.

Кроме того, добавлять путь в PATH ради того чтобы указать Windows на одну единственную программу, было не рационально, сродни стрельбе из пушки по воробьям. Вот тогда разработчики Windows 95 и придумали решение с разделом реестра, позволяющим указывать пути к конкретным исполняемым файлам.

Почему в этом разделе до сих пор есть подразделы для Write и Paintbrush? Так Windows обеспечивает совместимость программ!

Теоретически, какая-нибудь древняя программа может полагаться на своих ровесниц, наследницы которых уже сменили имя или расположение. Чтобы старые приложения не ломались, используется раздел реестра App Paths.

Сводная таблица

Итак, подведем итог! Проще всего сравнить возможности оболочки Windows и командного интерпретатора системы в табличной форме.

В таком виде становится наглядным не только более широкий диапазон поиска исполняемых файлов в проводнике, но и не вполне очевидная зависимость командной строки от переменной PATH. Именно ее пути влияют на то, нужно ли в консоли указывать путь к файлам, расположенным в системных папках.

Наконец, раздел App Paths представляет дополнительную ценность за счет того, что в нем можно указывать короткие псевдонимы исполняемых файлов, упрощая их запуск.

А вы используете раздел реестра App Paths или собственные переменные среды? Если да, то расскажите в комментариях, как они упрощают вашу работу!

Переменная среды (окружения) в Виндовс хранит информацию о настройках ОС и пользовательских данных. Обозначается она с помощью парного символа «%» , например:

С помощью этих переменных можно передавать необходимую информацию операционной системе. Например, %PATH% хранит список директорий, в которых Виндовс ищет исполняемые файлы, если путь к ним не задан явно. %TEMP% хранит временные файлы, а %APPDATA% — настройки программ пользователя.

Изменение переменных среды может помочь, если вы хотите перенести папку «Temp» или «AppData» в другое место. Редактирование %PATH% даст возможность запускать программы из «Командной строки» , не указывая каждый раз длинный путь к файлу. Давайте рассмотрим методы, которые помогут в достижении этих целей.

Способ 1: Свойства «Компьютера»

В качестве примера программы, которую необходимо запустить, используем . Попытавшись активировать это приложение из «Командной строки» , вы получите такую ошибку:

Это происходит потому, что вы не задали полный путь к исполняемому файлу. В нашем случае полный путь выглядит вот так:

"C:\Program Files (x86)\Skype\Phone\Skype.exe"

Чтобы это не повторять каждый раз, давайте добавим директорию Скайпа в переменную %PATH% .


Готово! Теперь вы можете запускать любую программу, а не только Skype, находясь в любой директории в «Командной строке» .

Способ 2: «Командная строка»

Рассмотрим случай, когда мы хотим установить %APPDATA% на диск «D» . Эта переменная отсутствует в «Переменных среды» , поэтому ее невозможно изменить первым способом.


Изменение значений переменных среды требует определенных знаний в этой сфере. Не играйтесь со значениями и не редактируйте их наугад, чтобы не навредить ОС. Хорошо изучите теоретический материал, и только после этого переходите к практике.

Этот раздел касается:
  • Платформы: Solaris SPARC, Red Hat Linux, SUSE Linux, Oracle Linux, Windows 10, Windows 8, Windows 7, Vista, Windows XP, Mac OS X

Инструкции на данной странице предназначены только для опытных пользователей и системных администраторов.


Общие сведения

  • Переменная PATH - это системная переменная, которую операционная система использует для того, чтобы найти нужные исполняемые объекты в командной строке или окне терминала.
  • Системную переменную PATH можно задать с помощью системной утилиты в панели управления Windows или с помощью файла запуска командной оболочки Linux и Solaris.
  • На компьютерах под управлением Windows или Mac OS X внесение изменений в системную переменную PATH обычно не требуется .

Windows

Windows 10 и Windows 8
  1. В строке "Поиск" выполните поиск: Система (Панель управления)
  2. Нажмите на ссылку .
  3. Нажмите Переменные среды . В разделе Переменные среды Изменить
  4. В окне (или Новая системная переменная ОК ОК .
Windows 7
  1. На рабочем столе правой кнопкой нажмите на значок Компьютер .
  2. В контекстном меню выберите Свойства .
  3. Нажмите на ссылку Дополнительные параметры системы .
  4. Нажмите Переменные среды . В разделе Переменные среды выберите переменную среды PATH . Нажмите Изменить . Если переменной PATH не существует, нажмите Создать.
  5. В окне Изменение системной переменной (или Новая системная переменная ) укажите значение переменной среды PATH . Нажмите ОК . Закройте остальные открытые окна, нажимая ОК .
  6. Откройте заново окно командной строки и выполните код java.
Windows XP
  1. Нажмите Пуск , выберите Панель управления , дважды нажмите на Система и выберите вкладку Дополнительно .
  2. Нажмите Переменные среды . В разделе Переменные среды выберите переменную среды PATH . Нажмите Изменить . Если переменной PATH не существует, нажмите Создать.
  3. В окне Изменение системной переменной (или Новая системная переменная ) укажите значение переменной среды PATH . Нажмите ОК . Закройте остальные открытые окна, нажимая ОК .
  4. Откройте заново окно командной строки и выполните код java.

Mac OS X

Чтобы запустить другую версию Java, укажите полный путь или используйте инструмент java_home:

% /usr/libexec/java_home -v 1.8.0_73 --exec javac -version

Solaris и Linux

  1. Чтобы узнать, правильно ли настроен путь:
    В окнах терминала введите:
    % java -version
    Будет выведена версия средства java , если не удается ее найти. Если версия устарела или появляется ошибка java: команда не найдена , то путь задан неправильно.
  2. Определите, какая исполняемая версия java является первой найденной в переменной PATH
    В окне терминала введите:
    % which java
Окончательная настройка пути

Чтобы задать путь окончательно, настройте его в файле автозагрузки.
Примечание. Приведены инструкции для двух самых популярных оболочек на Linux и Solaris. Если вы используете другие оболочки, см. Учебное пособие по установке переменной PATH .

Оболочка Bash

Отредактируйте файл автозагрузки (~/.bashrc)

  1. Измените переменную PATH variable
    PATH=/usr/local/jdk1.8.0/bin:$PATH
    export PATH
  2. Загрузите файл автозагрузки
    % . /.profile

  3. % java -version
Оболочка C (csh)

Отредактируйте файл автозагрузки (~/.cshrc)

  1. Задайте путь
    set path=(/usr/local/jdk1.8.0/bin $path)
  2. Сохранить изменения и закрыть окно
  3. Загрузите файл автозагрузки
    % source ~/.cshrc
  4. Убедитесь, что путь задан, повторив команду java
    % java -version

Переменная PATH являет собой системную переменную, с помощью которой операционная система находит нужные исполняемые объекты в командной строке или окне терминала. В параметре переменной содержится список (через точку с запятой ; ) директорий, в которых будет происходить поиск исполняемого файла при вызове команды из консоли.

В операционной системе Windows системную переменную PATH можно задать с помощью системной утилиты в Панели управления Windows .

Опишем, как изменить значение переменной PATH в операционной системе Windows 10 .

В меню Пуск выполняем команду Система (Панель управления → Система и безопасность → Система):

Нажимаем на ссылку Дополнительные параметры системы :

Открываем окно Переменные среды:


В разделе Переменные среды и Системные переменные выбераем переменную среды PATH . Нажимаем Изменить . Если переменной PATH не существует, нажимаем Создать .

Для изменения системных переменных окружения, необходимо обладать соответствующими правами. Если таких нет - следует создать пользовательскую переменную.


В окне "Изменить переменную среды " (или Новая системная переменная ) укажите значение переменной среды PATH , после чего подтвердите действие нажатием на кнопку ОК .


Если вы используете переменную PATH не для командной строки, а других приложений, например модуль PHP , следует перезагрузить компьютер.

    Команда SET используется для просмотра и изменения переменных среды окружения в командной строке Windows. Переменные окружения - это переменные, принимаемые значения которых характеризуют среду, в которой выполняется текущая программа - пути системных файлов, сведения об аппаратных средствах, каталоги пользователя и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных процессов или с помощью команды SET . Для просмотра значения, принимаемого конкретной переменной можно воспользоваться командой:

SET переменная
SET PATH - отобразить значение переменной PATH
Для создания новой переменной, или изменения значения существующей, используется команда:

SET переменная=строка

переменная - Имя переменной среды.
строка - Строка символов, присваиваемая указанной переменной.

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 /A выражение

SET /P variable=

Ключ /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:~0,-6%
ECHO Время2 = %tm%

Возможно использование число пропусков не задано, и используется отрицательное число, то принимаемое значение будет частью переменной от конца строки:

%PATH:~-10% - извлечет последние 10 символов переменной PATH

Нулевое значение можно не указывать, сохраняя формат подстановки:

%PATH:~0,-2% эквивалентно %PATH:~,-2%

При использовании переменных окружения в командных файлах существует определенное ограничение, связанное с тем фактом, что присваиваемое значение остается без изменения при его модификации внутри группы команд, задаваемой скобками, например в командах IF или FOR . Для обхода данного ограничения используется запуск командного процессора с параметром /V:ON и вместо знаков процента, для получения принимаемого переменной значения, используются восклицательные знаки. Кроме того, существует возможность использовать стандартный запуск командного процессора, но с локальным включением данного режима командой:

Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:


@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 )