Вопрос или проблема
Я ищу удобный способ добавления, изменения или удаления переменной окружения из командной строки. В частности, иногда я оказываюсь в ситуациях, когда мне нужно добавить несколько переменных в cmd.exe.
Я был бы благодарен, если бы кто-то показал мне способ изменения (то есть добавления нового каталога в) переменной %PATH%
без графического интерфейса.
Изменение должно быть постоянным, а не только для сессии cmd
.
Метод старой школы непосредственно для манипуляции переменными реестра с помощью команды 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, что может спасти вашу машину, если вы достаточно манипулируете переменными окружения, чтобы использовать это на лету.
Вы можете использовать setx.
Пользовательская переменная:
SETX PATH "%PATH%;C:\MyDir"
Системная переменная:
SETX PATH "%PATH%;C:\MyDir" /M
Вы можете использовать ключ реестра HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
, чтобы указать на пакетный файл, что позволит вам вносить полустабильные изменения без углубления в таинственные диалоговые окна настроек.
Если вы не хотите использовать графический интерфейс (например, Панель управления, Система, Дополнительно, Переменные окружения, 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, и это должно избежать необходимости входа/выхода.
Легко изменить путь в текущем процессе cmd.exe:
PATH c:\MyNewDirectory;%PATH%
Вы всегда можете выполнить HELP PATH для получения справки по команде PATH.
Для действительно постоянных изменений, охватывающих всю систему, вам действительно стоит использовать Панель управления системой (также известную как Мой компьютер -> Свойства -> Дополнительно -> Переменные окружения, для WinXP). Настройки там влияют на всю вашу систему, включая графические программы в оболочке Explorer.
Если вам нужны эти изменения только в оболочке cmd.exe
, вы можете запустить пакетный файл, который устанавливает их каждый раз, когда вы открываете окно cmd.exe. Ответ Фоши упоминает ключ HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
, что кажется отличным вариантом — легко вносить небольшие изменения и повторно запускать из командной строки, если это необходимо. Но это не повлияет на графические окна или оболочку Explorer.
Я на самом деле удивлён, что Sysinternals не имеет подходящей утилиты для этого. Может быть, другая из PStools может это сделать?
Существует множество способов сделать это. REG ADD — один из них, или REG IMPORT (используя экспортированный .REG файл с другого компьютера). SETX /M — другой. Вы также можете развернуть это с помощью настроек групповой политики (самый простой способ для большого количества компьютеров).
Ещё одна мысль, не упомянутая здесь, создайте скрипт autohotkey, который запустит панель управления и введет её за вас. Это хорошо работает, если вы уже являетесь пользователем AHK 🙂
https://autohotkey.com/board/topic/63210-modify-system-path-gui/
А что насчет редактирования ключа hklm/system/currentcontrolset001/control/session manager/environment: path? Но тот же ключ находится в hklm/system/currentcontrolset002 и hklm/system/currentcontrolset. Кажется, что это может быть корректно, согласно здесь: https://stackoverflow.com/questions/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install
Ответ Гэрета обновлён:
Проверено в cmd. Нужно запускать от имени администратора. (использовалось на Windows 11)
Установка переменных окружения на конкретный путь
setx MYVIDEOS "C:\Videos"
Установка системных переменных
setx MYVIDEOS "C:\Videos" /M
Установка с CurrentUser
setx MYVIDEOS "%USERPROFILE%\Videos"
Ответ или решение
Изменение или установка системных переменных окружения в Windows через командную строку (cmd.exe) — это задача, которая может быть выполнена различными способами. В этом ответе мы подробно рассмотрим, как добавить, изменить или удалить переменные окружения, включая переменную PATH
, используя как команду SETX
, так и прямые манипуляции с реестром.
1. Использование команды SETX
Команда SETX
предназначена для установки переменных окружения и является безопасным способом изменения их значений без прямого редактирования реестра. Она позволяет задавать как пользовательские, так и системные переменные.
Чтобы добавить значение в переменную PATH:
Для пользовательской переменной:
SETX PATH "%PATH%;C:\MyNewDirectory"
Для системной переменной:
SETX PATH "%PATH%;C:\MyNewDirectory" /M
Важно: Изменения, введенные с помощью
SETX
, вступают в силу только в новых сеансах командной строки.
2. Прямое редактирование реестра
Если необходимо произвести изменения на уровне реестра, можно использовать команду REG ADD
. Этот метод подходит для более опытных пользователей и требует аккуратности, поскольку некорректные изменения могут повлиять на стабильность системы.
Для добавления новой директории к переменной PATH:
REG ADD HKCU\Environment /v PATH /t REG_EXPAND_SZ /d "%PATH%;C:\MyNewDirectory" /f
Параметры:
/v
указывает имя переменной (в данном случае,PATH
)./t
указывает тип данных (например,REG_EXPAND_SZ
)./d
указывает значение, которое необходимо установить./f
принудительно перезаписывает существующее значение без запроса подтверждения.
Для системных переменных используйте:
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v PATH /t REG_EXPAND_SZ /d "%PATH%;C:\MyNewDirectory" /f
Важно помнить, что для этих изменений могут потребоваться права администратора, и может потребоваться перезагрузка компьютера или перезапуск сеанса для применения изменений.
3. Удаление переменной окружения
Чтобы удалить переменную окружения с помощью SETX
, можно использовать следующую команду:
SETX PATH "" /M
Это очистит значение переменной PATH
, однако рекомендуется использовать команду REG DELETE
для полного удаления переменной из реестра:
REG DELETE HKCU\Environment /v PATH /f
4. Использование Autorun в реестре
Для автоматического выполнения скриптов при открытии командной строки можно использовать ключ реестра:
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
Запишите туда путь к вашему скрипту, который будет выполнен автоматически.
Заключение
Использование командной строки для изменения системных переменных окружения в Windows предоставляет гибкость и контроль. Команда SETX
является предпочтительным вариантом для большинства пользователей, так как она более безопасна и не требует знания сложной структуры реестра. Однако в случаях, когда требуется более тонкая настройка или вы хотите работать на уровне системы, использование REG
команд также имеет свои преимущества.