Установка или изменение (общесистемной) переменной среды в cmd.exe

13

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

Я был бы признателен, если бы кто-то показал мне не-GUI способ изменить (то есть: добавить новый каталог) %PATH%переменную.

Изменение должно быть постоянным, а не только на время cmdсеанса.

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

Ответы:

8

Олд-школа метод прямого управления переменными реестра с помощью команды 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 достаточно, чтобы использовать их на лету.

user51259
источник
Эта команда требует перезапуска?
Джузер Али
Нет, но вы должны использовать новый (cmd) процесс.
Майк
1
Для меня это нужно перезагрузить? Почему? Я на Windows XP, sp3.
Чангванг Чжан
15

Вы могли бы использовать setx.

Пользовательская переменная:

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

Системная переменная:

SETX PATH "%PATH%;C:\MyDir" /M
багор
источник
Я считаю, что SETX доступен с Vista, но я на XP.
Рене Ниффенеггер
Вы можете избежать копирования setx.exe с компьютера с Vista. вероятно не сработает, но может.
шарлатанство
2
SETX является частью Resource Tools для Windows Server 2003. Вы можете просто добавить его в каталог system32 или любой другой добавленный к вам путь (куриное яйцо!).
paradroid
Мне нужна часть / M, чтобы я мог изменять системную переменную, а не пользовательскую. Благодарность!
Андрей Сфат
Обе указанные команды неверны. Почему? Windows фактически поддерживает два значения PATH: общесистемное и для каждого пользователя. Когда вы печатаете echo %PATH%, вы видите их вместе, как <system path>;<user path>. Таким образом, первая команда приведет к тому, что текущие элементы системного пути появятся в пути пользователя (что не так уж плохо), а вторая команда приведет к тому, что текущие элементы пользовательского пути появятся в системном пути (что недопустимо).
Саша
1

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

Phoshi
источник
Насколько я знаю, это будет влиять только на последующие вызовы cmd.exe (без флага / d), но не на всю систему или другие (впоследствии вызванные) процессы.
Рене Ниффенеггер
Это верно. Я считаю, что преимущество означает, что вы можете делать с ним больше, не беспокоясь о разных процессах, не зная, что делать. Однако он будет работать в любом интерактивном режиме, что всегда приятно: P
Phoshi
1

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

  • Обновить %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

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

Редактировать: %PATH% необходимо указать.

Изменить: Также стоит отметить, что это, вероятно, требует перезагрузки или повторного входа в систему, прежде чем он вступит в силу. При изменении его в GUI вступает в силу немедленно (для новых cmd.exeсессий).

Ссылка: http://support.microsoft.com/kb/104011

Как отмечено в ссылке, если вы хотите написать некоторый код, вы можете отправить WM_SETTINGCHANGE, и это должно избежать требования входа / выхода из системы.

opello
источник
это было бы очень полезно. Но если я запрашиваю эту переменную, она ничего не возвращает.
ПА.
Хмм. На 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.

jdigital
источник
1
Разве это не хорошо только для сессии?
JL.
да, это не сохраняется во время сеансов.
Джон Т
JL прав, и я искал постоянное решение. Я отредактировал свой вопрос соответственно.
Рене Ниффенеггер
0

Для действительно постоянных общесистемных изменений вы действительно хотите использовать Системную панель управления (или Мой компьютер -> Свойства -> Дополнительно -> Переменные среды, для WinXP). Настройки там влияют на всю вашу систему, включая программы с графическим интерфейсом в оболочке Explorer.

Если вам нужны только эти изменения в cmd.exeоболочке, вы можете запустить пакетный файл, который устанавливает их при каждом запуске окна cmd.exe. В ответе Фоши упоминается HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, что кажется отличным вариантом - легко вносить небольшие изменения и повторно запускать из командной строки, если это необходимо. Но это не повлияет на окна GUI или оболочку Explorer.

Я на самом деле удивлен, что у Sysinternals нет способной утилиты сделать это. Может быть, другой из PStools может сделать это?

шарлатан
источник
0

Много способов сделать это. REG ADD равен единице, или REG IMPORT (используется экспортированный файл .REG с другого компьютера). SETX / M это другое. Вы также можете вытолкнуть его с помощью предпочтений групповой политики (простой способ для большого количества компьютеров).

Skatterbrainz
источник
0

Еще одна мысль, не упомянутая здесь, создайте скрипт autohotkey, который запустит панель управления и введите его для вас. Это хорошо работает, если вы уже являетесь пользователем AHK :-)

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

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

Джастин голдберг
источник