Додавання каталогу до змінної середовища PATH в Windows


523

Я намагаюся додати C:\xampp\phpдо своєї PATHзмінної системного середовища в Windows.

Я вже додав його за допомогою діалогового вікна "Змінні середовища".

Але коли я набираю консоль:

C:\>path

не відображається новий C:\xampp\phpкаталог:

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin

У мене є два питання:

  1. Чому так сталося? Чи є щось, що я зробив не так?
  2. Крім того, як я можу додати каталоги до своєї PATHзмінної за допомогою консолі (і програмно, з пакетним файлом)?

43
Це питання на тему, оскільки це питання про "програмісти інструментів, якими зазвичай користуються". Якщо ви розвиваєтеся в Windows, і вам ніколи не потрібно було змінювати PATH, я здивований. Щоб задовольнити бажання пов’язатись із програмуванням, я підкреслив, на що вказував найвищий відповідь: Це можна зробити програмно через консоль (або через пакетний файл).
Джордж Стокер

1
дякую за огляд @GeorgeStocker так, так, я це зробив програмно, але я просто не мав уявлення, що мені потрібно переробити після застосування змін на консольному сеансі. (і я думаю, що це лише в моєму випадку), але найвища відповідь, що голосує, як правило, відповідає на питання
Netorica

1
@George - погодився, але, як це є, це питання написано для Super User, а не Stack Overflow. Super User надасть допомогу в налаштуваннях веб-сервера для особистого використання. Переповнення стека призначено для питань програмування.
jww

1
Вийдіть і відкрийте нову консоль ... Якщо ви використовуєте bash, це може вимагати перезавантаження системи до того, як зміни збережуться, залежно від того, як / що ви використовуєте.
Tracker1

Відповіді:


148

Це лише змінює реєстр. Існуючий процес не використовуватиме ці значення. Новий процес зробить це, якщо він був запущений після цієї зміни і не успадкує старе середовище від свого батьківського.

Ви не вказали, як розпочали сеанс консолі. Найкращий спосіб забезпечити це - вийти з командної оболонки та запустити її знову. Потім він повинен успадкувати оновлений PATH.


9
Хм, ні, це дійсно дійсно лише змінює реєстр. Зрозуміло, що це робиться в діалоговому вікні «Панель управління» замість, скажімо, командного рядка з командою PATH. Ви можете спостерігати за тим, що це робить легко за допомогою монітора процесів SysInternals, якщо вам все одно. Використання PATH не є тим самим, будь-які внесені вами зміни будуть втрачені, коли консоль закриється. SETX - це спосіб вносити постійні зміни, як у діалоговому вікні.
Ганс Пасант

3
Це вірно. Ви завжди повинні перезапустити сеанс консолі, перш ніж вона підбирає нові змінні середовища.
BrainSlugs83

1
Чи оновив би консольний сеанс оновлення змінних, якби WM_SETTINGCHANGEповідомлення було надіслано від аплікації? stackoverflow.com/a/8358361
John_West

Теоретично це можливо, жодна практична реалізація CRT насправді цього не робить. Провідник робить.
Ганс Пасант

1
Довідкова інформація, що підтверджує це: blogs.msdn.microsoft.com/oldnewthing/20150915-00/?p=91591
Euro Micelli

958

Варіант 1

Після зміни PATHз графічним інтерфейсом закрийте і знову відкрийте вікно консолі.

Це працює, тому що лише програми, запущені після зміни, побачать нові PATH.

Варіант 2

Виконайте цю команду у відкритому вікні команд:

set PATH=%PATH%;C:\your\path\here\

Ця команда додає C:\your\path\here\до струму PATH.

Розбийте його:

  • set- Команда, яка змінює змінні середовища cmd лише для поточного сеансу cmd ; інші програми та система не впливають.
  • PATH=- Позначає, що PATHзмінна середовища повинна бути тимчасово змінена.
  • %PATH%;C:\your\path\here\- %PATH%Частина розширюється до поточного значення PATH, а ;C:\your\path\here\потім приєднується до нього. Це стає новим PATH.

16
@Ilya: Я мав на увазі для вас відкрити вікно консолі після зміни шляху в MyComputer-> Properties-> Advanced-> Env Variables-> Path. Деякі програми Windows поширюватимуть зміни змінних умов середовища після їх запуску, а деякі - не. WinXP cmd.exe не робить.
JimR

7
якщо я виходжу з консолі і повторюю, мені доведеться скинути шлях. Будь-яка ідея, як зробити цю зміну постійною?
Девід 天宇 Вонг

2
@David 天宇 Wong Якщо ви дотримуєтесь "Мій комп'ютер"> "Властивості"> "Додатково"> "Змінні середовища"> "Шлях". і додати каталог до кінця цього рядка, він залишиться. Просто не забудьте відкрити консоль після внесення змін.
theB3RV

yup @ theB3RV, це просто довгий шлях, щоб зробити щось просте. Дивно, що не існує стійкої команди, яку можна набрати в консолі
David 天宇 Wong

12
@David 天宇 Вонг Щойно знайдено "SETX - це спосіб внести постійні зміни, як у діалоговому вікні". тому команда SETX повинна це зробити
theB3RV

202

УВАГА: Це рішення може бути руйнівним для вашої PATH та стабільності вашої системи. Як побічний ефект, він об'єднає вашого користувача та систему PATH та скоротить PATH до 1024 символів. Дія цієї команди незворотна. Спершу зробіть резервну копію PATH. Дивіться коментарі для отримання додаткової інформації.

Не сліпо копіюйте та вставляйте це. Використовуйте обережно.

Ви можете постійно додати шлях до PATHз setxкомандою:

setx /M path "%path%;C:\your\path\here\"

Видаліть /Mпрапор, якщо ви хочете встановити користувача PATHзамість системи PATH.

Примітки:

  • setxКоманда доступна тільки в Windows 7 і пізніших версій.
  • Ви повинні запустити цю команду з підвищеного командного рядка.

  • Якщо ви хочете змінити його лише для поточного сеансу, використовуйте set .


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"встановити значення PATH на рівні машини
Lu55

7
Чому це не прийнята відповідь? Я думаю, що більшість людей хотіли б постійно
Пітер Гордон,


9
ПОПЕРЕДЖЕННЯ : Через використання %PATH%змінної ця команда об'єднує глобальні env змінні з користувачами. Чи не так? Це може створити небажані побічні ефекти, особливо з перемикачем / M
FF_Dev

4
ПОПЕРЕДЖЕННЯ 2: Ця %PATH%змінна може не синхронізуватися зі змінними середовища, оскільки вона завантажується під час запуску командного рядка і ніколи не перезавантажується після цього (навіть при виконанні команди setx). Також це могло бути змінено локально попередньо виконаними сценаріями.
FF_Dev

66

Вам не потрібна якась команда setабо setxкоманда, просто відкрийте термінал і введіть:

PATH

Це показує поточне значення змінної PATH. Тепер ви хочете додати до нього каталог? Просто введіть:

PATH %PATH%;C:\xampp\php

Якщо з будь-якої причини ви хочете очистити змінну PATH (зовсім немає шляхів або видалити всі шляхи в ній), введіть:

PATH ;

Оновлення

Як Даніал Вілсон зазначив у коментарі нижче, він встановлює шлях лише в поточному сеансі. Щоб постійно встановити шлях, використовуйте, setxале пам'ятайте, хоча це встановлює шлях постійно, але НЕ в поточному сеансі, тому вам потрібно запустити новий командний рядок, щоб побачити зміни, більше інформації тут .

Щоб перевірити, чи існує змінна середовище чи побачити її значення, використовуйте команду ECHO:

echo %YOUR_ENV_VARIABLE%

1
Це працювало :) як щодо цього! 'PATH% PATH%;' Я це пам'ятаю
Дастін Вуддард

12
Я думаю, що це працює лише для випадку сеансу cmd, використовуйте setx для його постійного зміни
Даніель Вілсон

2
Не включайте цитати з цим. Наприклад, дзвоніть PATH %PATH%;C:\Program Files\...замістьPATH "%PATH%;C:\Program Files\..."
icc97

4
Не використовуйте setx! Ви ризикуєте урізати змінну свого шляху, втрачаючи багато інших шляхів, на які ви витратили час. Зверніть увагу на попередження вище.
STWilson

1
@STWilson, занадто пізно, щоб побачити ваш коментар!
Західний Ян

48

Я б використовував PowerShell замість цього!

Щоб додати каталог в PATH за допомогою PowerShell, виконайте наступне:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

Щоб встановити змінну для всіх користувачів, в цілому на машині, останній рядок повинен бути таким:

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

У сценарії PowerShell, можливо, ви захочете перевірити наявність свого C:\xampp\phpфайлу перед тим, як додати його до PATH (у випадку, якщо він був раніше доданий). Можна загортати його ifумовно.

Тож склавши все це разом:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}

Ще краще, можна було б створити загальну функцію. Просто введіть каталог, який ви хочете додати:

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

Ви можете покращити справи, виконавши полірування. Наприклад, використовуючи Test-Pathдля підтвердження того, що ваш каталог фактично існує.


3
для дзвінка SetEnvironmentVariableз Machineпараметром потрібно відкрити PowerShell з правами адміністратора
InsOp

прикро розчаровує те, що ця оболонка "power" не розпізнає% userprofile% ні $ userprofile .. але знову ж таки, про це ми говоримо
abbood

3
@abbood Те, що ви шукаєте, це $env:userprofile.
nyuszika7h

3
Ви також повинні вказати або в, userабо machineу виклику GetEnvironmentVariable. В іншому випадку $PATHбуде міститись значення як користувачів, так і машинної частини реєстру, яка необов'язково підірве змінну шляху при повторному зберіганні.
Рене Ніффенеггер

35

Більш безпечний SETX

Киньте на всі коментарі до початкової SETXвідповіді @ Nafscript .

  • SETXза замовчуванням оновить шлях вашого користувача .
  • SETX ... /Mоновить ваш системний шлях.
  • %PATH% містить системний шлях із доданим дорогою користувача

Попередження

  1. Створіть резервну копіюPATH - SETXуріже ваш небажаний розмір довше 1024 символів
  2. Не дзвонитиSETX %PATH%;xxx - додає системний шлях у шлях користувача
  3. Не дзвонитиSETX %PATH%;xxx /M - додає шлях користувача до системного шляху
  4. Надмірне використання пакетного файлу може спричинити сліпоту 1

На сторінці ss64 SETX є дуже хороші приклади. Важливо вказувати на те, де розташовані ключі реєстру для SETXvsSETX /M

Змінні користувача:

HKCU\Environment

Змінні системи:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Інструкція з використання

Додати до користувача PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1

Додайте до системи PATH

append_system_path.cmd. Потрібно запустити як адміністратор.

(це в основному те саме, за винятком іншого Keyта SETX /Mмодифікатора)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M

Альтернативи

Нарешті, потенційно існує вдосконалена версія під назвою SETENV, рекомендована сторінкою ss64 SETX, яка розбиває налаштування змінних користувачів або системного середовища.


1. Не суворо правда


24

Пізно до вечірки - але зручно, якщо ви вже в каталозі, який хочете додати до PATH.

set PATH=%PATH%;%CD%

редагувати: за коментарем - працює зі стандартними вікнами cmd, але не в powerhell.

Для повноважень %CD%еквівалент є[System.Environment]::CurrentDirectory


1
Мій Powershell каже, що% CD% не розпізнається.
Паулу Матос

@PauloMatos Можна спробувати скористатись[System.Environment]::CurrentDirectory
nclord

4

Крім усіх відповідей, якщо ви хочете отримати гарний інструмент графічного інтерфейсу для редагування змінних вашого середовища Windows, ви можете скористатися програмою швидкого редактора середовища

Спробуй це! його безпечний у використанні та приголомшливий!

http://www.rapidee.com/uk/


2
Windows 10 значно покращив редактор змінних Path Environment зараз. Їм знадобилося лише 20 років, щоб обійтись.
icc97

4
  • Зміни командного рядка не будуть постійними, втрачаються, коли консоль закриється.
  • Шлях працює як перший приходить перший сервіс.
  • Ви можете замінити інші вже включені виконувані файли. Наприклад, якщо у вас вже є інша версія на вашому шляху, і ви хочете додати іншу версію, не вносячи постійних змін у шлях, слід поставити каталог на початку команди.

Переосмислити вже включені виконувані файли;

встановити PATH = C: \ xampp \ php;% PATH%;


2

Перевірка вищенаведених пропозицій на Windows 10 LTSB і короткий огляд контурів "довідки" (що можна побачити під час введення команди "?" На cmd) привели мене до висновку, що команда PATH змінює змінну системного середовища Значення шляху лише для поточного сеансу, але після перезавантаження всі значення скидаються до стандартних стандартів - так само, як вони були до використання команди PATH.

З іншого боку, використання команди SETX з адміністративними привілеями набагато потужніше, воно змінює ці значення на добро (або, принаймні, до наступного використання цієї команди або до наступного разу, коли ці значення будуть маніпулювати GUI вручну ...).

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

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

де слід уникати будь-якого знака рівності '=', і не хвилюйтесь про пробіли! не потрібно вставляти більше лапок для шляху, який містить пробіли всередині нього - знак розділення ';' виконати роботу.

Ключове слово PATH, що слідує за SETX, визначає, який набір значень слід змінити серед можливих значень змінних системного середовища, а% PATH% (слово PATH, оточене знаком відсотка) всередині лапок, говорить ОС залишити існуючу Значення PATH такими, якими вони є, і додати до існуючих значень наступний шлях (той, що слідує за знаком розділення ';').

HTH


2

Щодо пункту 2, я використовую простий пакетний файл, який є заповненням PATHабо іншими змінними середовища. Тому забруднення змінних довкілля за замовчуванням не відбувається. Цей пакетний файл доступний звідусіль, тому я можу набрати:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php

Це важлива різниця між * nix-es та Windows. Пакет працює в одній оболонці і змінюється в середовищі, що залишається після її виходу (в межах сеансу). Однак це скорочує обидва способи: пакетний файл може знищити ваше середовище. (BTW, у * nix-es вам просто доведеться sourceтакий файл, як . mybatchfile).
Томаш Гандор

Привіт @ grzegorz-gajos, я шукав саме це, ваше посилання для більш детальної інформації дає 404. Будь-які альтернативи?
devkabiir

На жаль, вміст із посилання більше не доступний. Я зняв.
Гжегож Гайош

1

У командному рядку ви скажете Cmd використовувати командний рядок Explorer, попередньо встановивши його start.

Отже start Yourbatchname.

Зауважте, що ви повинні зареєструватися так, ніби його ім'я batchfile.exe.

Програми та документи можуть бути додані до реєстру, так що ввівши своє ім’я без їх шляху у діалоговому вікні «Пуск - запуск» або ярлику дозволяє Windows знайти їх.

Це загальний файл рег. Скопіюйте рядки нижче в новий текстовий документ і збережіть його як anyname.reg. Відредагуйте це за допомогою своїх програм або документів.

У шляхах використовуйте \ для відокремлення імен папок у ключових шляхах, оскільки regedit використовує єдине \, щоб відокремити його ключові імена. Усі файли реґу починаються з REGEDIT4. Точка з комою перетворює рядок у коментар. Символ @ означає присвоїти значення ключовому, а не іменному значенню.

Файл не повинен існувати. Це можна використовувати для встановлення Word.exe для відкриття Winword.exe.

Введення start batchfileпочне iexplore.exe.

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

Вам вже розповіли про шлях в іншій відповіді. Також дивіться doskey /?для cmd макросів (вони працюють лише під час набору тексту).

Ви можете запускати команди запуску для CMD. З технічної довідки з набору ресурсів Windows

Автозапуск

HKCU\Software\Microsoft\Command Processor 

Data type Range Default value 
REG_SZ  list of commands  There is no default value for this entry.  

Опис

Містить команди, які виконуються кожного разу при запуску Cmd.exe.


1

Кращою альтернативою Панелі управління є використання цієї безкоштовної програми з sourceforge під назвою Pathenator:

https://sourceforge.net/projects/pathenator/

Однак це лише працівники системи, яка має Dot.Net 4.0 або більше, наприклад Windows 7,8 або 10.


1

Якщо запустити команду cmd, вона оновить усі системні змінні для цього вікна команди.


В певному сенсі. Що стається, що ви починаєте новий сеанс протягом поточного сеансу. Якщо ви виїдете, вам потрібно буде зателефонувати exitдвічі, спочатку закрити новий, а потім закрити перший сеанс (зі старим середовищем).
Farway

1

використовувати патч з gtools

це робить інтуїтивно зрозумілим чином, наприклад:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

він показує результати без необхідності створювати новий cmd !


0
  1. Я встановив PHP того часу. Витягнув php-7 ***. Zip в C: \ php \
  2. Створіть резервну копію моєї поточної змінної середовища PATH: запуск cmdта виконання команди:path >C:\path-backup.txt

  3. Отримати моє поточне значення шляху у файлі C: \ path.txt (так само)

  4. Змініть path.txt (звичайно, моя довжина шляху більше 1024 знаків, Windows працює кілька років)
    • Я там видалив дублікати шляхів, як-от "C: \ Windows; або C: \ Windows \ System32; або C: \ Windows \ System32 \ Wbem; - У мене двічі.
    • Видаліть також шляхи видалення програм. Приклад: C: \ Program Files \ NonExistSoftware;
    • Таким чином, моя довжина рядка шляху <1024 :)))
    • в кінці рядка шляху додати; C: \ php \
    • Скопіюйте значення контуру тільки в буфер із обрамленими подвійними лапками! Приклад: "C: \ Windows; ****; C: \ php \" Ні PATH = не повинно бути там !!!
  5. Відкрийте Windows PowerShell як адміністратор.
  6. Виконати команду:

setx path "Here you should insert string from buffer (new path value)"

  1. Повторно запустіть свій термінал (я використовую "Далекий менеджер") і перевірте: php -v

0

Настільки тривіально, як це може бути, мені довелося перезапустити Windows, зіткнувшись з цією проблемою.

Я працюю під управлінням Windows 7 x64. Я зробив вручну оновлення до змінної системи PATH. Це працювало нормально, якщо я запускаю cmd.exe із меню stat. Але якщо я введіть "cmd" в адресному рядку Провідника Windows, здається, завантажуйте PATH з іншого місця, в якому не було змін вручну.

(Щоб уникнути сумнівів - так, я закривав і повторював cmd кілька разів, перш ніж перезапустити, і це не допомогло.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.