Как я могу обновить переменную PATH из реестра без перезагрузки, выхода из системы или перезапуска проводника?

38609
Iszi

Я внес некоторые изменения в %PATH%переменную в реестре. Теперь я хотел бы, чтобы эти изменения были применены без необходимости выхода из системы, перезагрузки или перезагрузки проводника. Есть ли способ сделать это?

Я бы предпочел сделать это с помощью какой-то команды, которая может быть помещена в конец .BATфайла, и я не хочу использовать какие-либо инструменты, кроме тех, которые поставляются с ОС в новой установке. Это должно быть минимально совместимо с Windows XP SP3 и должно работать вплоть до Windows 7 x64 и Server 2008 R2.

6
http://superuser.com/questions/312906/how-can-i-update-cygwin-shell-environment-variables-set-in-system-properties-win/312931#312931 - Вам необходимо написать / установить программу который отправляет сообщение WM_SETTINGCHANGE. Zoredache 12 лет назад 3
@Zoredache Итак, это не то, что можно просто сделать из командной строки? Облом. Iszi 12 лет назад 0
Можно выключить проводник, внести изменения и перезапустить проводник с помощью инструментов CMD в XP. Я использовал Kill / f, предупредил пользователя, поставил паузу и убил ее. В 7 я думаю, что команда является Taskkill. Я не пробовал этот трюк в 7. Psycogeek 12 лет назад 0

4 ответа на вопрос

3
Dave
  • Измените пользовательский или системный путь в свойствах системы.
  • Запуск этого пакетного файла извлекает новые переменные PATH с помощью запроса REG.
  • Команды FOR анализируют переменные PATH из результатов REG.
  • Текущий PATH обновляется до значений реестра.
  • Я использую ConEmu для своих консолей, и он запускает этот пакетный файл на каждой новой консоли, чтобы обновить PATH, поэтому перезагрузка не требуется.

@echo off echo. echo Refreshing PATH from registry  :: Get System PATH for /f "tokens=2*" %%A in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') do set syspath=%%B  :: Get User Path for /f "tokens=2*" %%A in ('reg query "HKCU\Environment" /v Path') do set userpath=%%B  :: Set Refreshed Path set PATH=%userpath%;%syspath%  echo Refreshed PATH echo %PATH% 

`` `

Параметр Commands задачи в ConEmu запускает C: \ Windows \ System32 \ cmd.exe с ключом / k, чтобы запустить вышеупомянутый файл refreshpath.cmd, а затем остается. Это обновляет путь и оставляет консоль открытой.

C:\Windows\System32\cmd.exe /k refreshpath.cmd

ConEmu Task settings

Когда я запускаю `for / f" tokens = 3 * "%% A in ... do set syspath = %% A %% B`, вывод не включает в себя * first * пробел в моем пути, например` C: \ Program Files` становится `C: \ ProgramFiles`. Вместо этого было бы лучше использовать `for / f" tokens = 2 * "%% A in ... do set syspath = %% B` Twisty Impersonator 7 лет назад 0
Дэйв, можешь сказать шаг за шагом, что ты делаешь, чтобы новая консоль ConEmu работала с этим командным файлом? Где вы положили в этот код? Благодарю. Саша Черных 7 лет назад 0
1
Shannon Wagner

Если вы пытаетесь использовать новое значение переменной пути из командной оболочки Windows, все, что вам нужно сделать, это закрыть окно командной оболочки и открыть новое. Новая командная оболочка загрузит обновленную переменную пути.

Поэтому я думаю, что ответ на ваш первоначальный вопрос в некотором роде зависит от того, где именно вы пытаетесь увидеть, как изменения вступят в силу ... Есть что-то конкретное, что не работает для вас?

Я должен проверить это. Я пытался открыть новую командную оболочку, но пока не закрыл первую. Iszi 12 лет назад 0
Кроме того, какую переменную вы изменяете - системный путь или пользовательский путь? Я почти уверен, что поведение будет отличаться для каждого (они обновляются на основе разных триггеров). Shannon Wagner 12 лет назад 0
Переменная находится в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment Iszi 12 лет назад 1
Проверено. Не повезло здесь. Оболочка CMD была закрыта при изменении ключа реестра, после чего открылась новая, и изменение PATH, похоже, не вступило в силу. Iszi 9 лет назад 3
Это на самом деле не работает. Это загрузит старое значение переменной пути. iopq 9 лет назад 2
Иногда я вижу, что это происходит, когда требуется перезагрузка, чтобы увидеть обновленные пути, независимо от того, сколько раз вы снова открываете оболочку, она не обновляется. Только выход из сеанса Windows через перезагрузку или выход из системы устраняет проблему. Если кто-нибудь знает, почему это происходит, было бы неплохо разобраться. ferventcoder 9 лет назад 0
-2
iopq
  1. Change the PATH variable from the UI in environment variables.
  2. Add a new environment variable, call it something random. Maybe something like CHANGE_TO_UPDATE and put a random value like x in it.
  3. Remember to restart cmd.exe or whatever program that needs to see the new path variable.

This will actually trigger the settings to update when you launch a new application.

-2
Richard Woodruff

Самый простой способ добавить переменную в путь без перезагрузки - это открыть командную строку и ввести: PATH = (VARIABLE);% path% и нажать ввод. Чтобы проверить, загружена ли ваша переменная, введите PATH и нажмите ввод.

Я думаю, что он хочет спросить, как сделать так, чтобы изменения в PATH отражались в CMD без перезагрузки. Nic Szer 6 лет назад 0