Установка или изменение (общесистемной) переменной среды в 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 достаточно, чтобы использовать их на лету.


Эта команда требует перезапуска?
— Джузер Али

Нет, но вы должны использовать новый (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ключ реестра, чтобы указать на командный файл, чтобы позволить вам вносить полупостоянные изменения, не углубляясь в непонятные диалоги настроек.


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


это было бы очень полезно. Но если я запрашиваю эту переменную, она ничего не возвращает.
— ПА.

Хмм. На 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). Настройки там влияют на всю вашу систему, включая программы с графическим интерфейсом в оболочке 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 это другое. Вы также можете вытолкнуть его с помощью предпочтений групповой политики (простой способ для большого количества компьютеров).


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.