Встановлення або модифікація змінної середовища (у всій системі) у cmd.exe


13

Я шукаю зручний спосіб додати та / або змінити та / або видалити змінну середовища з командного рядка. Особливо, я опиняюся часом у ситуаціях, коли мені потрібно додати кілька змінних у cmd.exe.

Буду вдячний, якби хтось показав мені спосіб, що не змінює графічний інтерфейс, щоб змінити (тобто додати новий каталог до) %PATH%змінної.

Зміна повинна бути постійною, а не лише протягом тривалості cmdсеансу.


1
я думаю , що одна проблеми , яку ви знайдете, що більшість змін до постійних , загальносистемних змінні середовища вимагають виходу з системи / логіна (або перезавантажитися) для сеансу користувача , щоб використовувати змінені значення.
шарлатаний кіхот

Відповіді:


8

Метод Old School безпосередньо маніпулювати змінними реєстру командою reg був на гроші. Ось як це зробити:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Введіть це в однорядковий сценарій під назвою apath.bat, який виглядає приблизно так:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Тоді все, що вам потрібно надати - це шлях до нового каталогу, який ви додаєте під час виклику сценарію, і вам набрано:

наприклад: apath.bat% addonpath%

Хоча Гінч правий. Найкращий спосіб зробити це, якщо ви використовуєте Vista або вище - використовувати команду SETX, розроблену для того, щоб ми могли поширювати змінні середовища без ризику безпосередньо маніпулювати реєстром за допомогою команди reg, яка може врятувати вас на вашій машині, якщо Ви маніпулюєте змінними ENV достатньо, щоб використовувати його на льоту.


Чи потрібна ця команда перезавантаження?
Юзер Алі

Ні, але ви повинні використовувати новий (cmd) процес.
Майк

1
Для мене це потребує перезавантаження? чому? Я на Windows XP, sp3.
Changwang Zhang

15

Ви можете використовувати setx.

Користувацька змінна:

SETX PATH "%PATH%;C:\MyDir"

Системна змінна:

SETX PATH "%PATH%;C:\MyDir" /M

Я вважаю, що SETX доступний з Vista, але я перебуваю на XP.
Рене Ніффенеггер

можливо, ви зможете піти від копіювання setx.exe з машини Vista. напевно, не вийде, але це може.
крякав кіхот

2
SETX є частиною Інструментів ресурсів для Windows Server 2003. Ви можете просто додати його до каталогу system32 або будь-який інший доданий вам шлях (куряче яйце!).
парадроїд

Мені потрібна частина / M, щоб я міг змінити системну змінну, а не користувацьку. Спасибі!
Андрій Сфат

Обидві вказані команди помилкові. Чому? Windows фактично підтримує два значення PATH: загальносистемні та на кожного користувача. Коли ви вводите echo %PATH%, ви бачите їх поєднані разом, як <system path>;<user path>. Таким чином, перша команда змусить поточні елементи системного шляху з'являтися в шляху користувача (що не так вже й погано), тоді як друга команда призведе до появи поточних елементів шляху користувача в системному шляху (що неприпустимо).
Саша

1

Ви можете використовувати HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunключ реєстру для вказівки на пакетний файл, щоб дозволити вносити напівперманентні зміни, не заглиблюючись у діалоги таємних налаштувань.


Наскільки мені відомо, це може впливати лише на наступні виклики cmd.exe (без прапора / d), але не на всю систему чи інші (згодом викликані) процеси.
René Nyffenegger

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

1

Якщо ви не хочете використовувати графічний інтерфейс (як у Панелі управління, Система, Додатково, Змінні середовища, PATH), можливо, ви можете використовувати його REGдля встановлення HKCU\Environment\PATH.

  • оновлення %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

В /fсилах перезапису існуючого значення , так що ви не повинні інтерактивно відповісти на питання.

Редагувати: %PATH% потрібно цитувати.

Редагувати: Варто також зазначити, що це, ймовірно, потребує перезавантаження або повторного входу, перш ніж воно набере чинності. Під час зміни його в графічному інтерфейсі набирає чинності негайно (для нових cmd.exeсесій).

Довідка: http://support.microsoft.com/kb/104011

Як зазначено в посиланні, якщо ви хочете написати якийсь код, ви можете надіслати WM_SETTINGCHANGE, і це повинно уникати вимоги входу / виходу.


це було б дуже корисно. Але якщо я запитую цю змінну, вона нічого не повертає.
ПА.

Грн. На XP Pro SP3 English I отримати свій шлях з: REG QUERY HKCU\Environment /v PATH.
opello

це специфічний для користувача шлях, а не загальносистемний шлях. не впевнений, де той живе. їх можна встановити на одне і те ж, але зазвичай містять окремі речі (а ваш робочий шлях - це злиття двох).
шарлатаний кіхот

Правильно, це в HKCU. Пов'язана стаття Microsoft KB має обидва місця реєстру.
opello

1
Це майже те, що я шукаю ... якщо був спосіб також надіслати WM_SETTINGCHANGE з cmd.exe.
Рене Ніффенеггер

0

Змінити шлях у поточному процесі cmd.exe легко:

PATH c:\MyNewDirectory;%PATH%

Ви завжди можете зробити HELP PATH за допомогою команди PATH.


1
Це не тільки добре для сесії?
JL.

так, це не зберігається протягом сеансів.
Джон Т

JL має рацію, і я шукав постійне рішення. Я відповідно відредагував своє запитання.
Рене Ніффенеггер

0

Для дійсно постійних загальносистемних змін, ви дійсно хочете використовувати панель управління Системою (він же - Мій комп'ютер -> Властивості -> Додатково -> Змінні середовища, для WinXP). Налаштування там впливають на всю вашу систему, включаючи програми GUI в оболонці Провідника.

Якщо вам потрібні лише ці зміни в cmd.exeоболонці, ви можете запустити пакетний файл, який встановлює їх щоразу, коли ви запускаєте вікно cmd.exe. Відповідь Фоши згадує про те HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, що здається чудовим варіантом - легко вносити невеликі зміни до, а при необхідності - запускати з командного рядка. Але це не вплине на вікна GUI або оболонку Explorer.

Я насправді здивований, що у Sysinternals немає здатної утиліти для цього. Можливо, хтось із PStools може це зробити?


0

Багато способів зробити це. REG ADD - це один, або REG IMPORT (використовуючи експортований .REG-файл з іншого комп'ютера). SETX / M - інша. Ви також можете висунути це за допомогою налаштувань групової політики (найпростіший спосіб передачі даних для великої кількості комп'ютерів)


0

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

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

А як щодо редагування hklm / system / currentcontrolset001 / управління / менеджер сеансів / середовище: ключ шляху? Але той самий ключ знаходиться під hklm / system / currentcontrolset002 та hklm / system / currentcontrolset. Схоже, це може бути правильним, тут: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

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