Как постоянно установить переменную в Windows 7 из командного файла? - PullRequest
46 голосов
/ 29 июня 2011

Я пытаюсь установить переменную среды PATH в Windows 7, используя bat-файл;однако, это не похоже на работу.

Я использую эту команду Windows:

set PATH=%cd%;%path%
pause

Однако это только кажется действительным для этого экземпляра cmd.Я хочу, чтобы он был постоянным, поскольку сначала я устанавливаю PATH, а затем запускаю программу, которая должна найти библиотеки в этой папке.

Ответы [ 7 ]

64 голосов
/ 30 июня 2011

Используйте setx.exe вместо set.

setx PATH "%cd%;%path%;"
pause

Обратите внимание, что это устанавливает путь для всех будущих экземпляров cmd, но не для текущего.Если вам это нужно, также запустите исходную команду set.

UPDATE: второй параметр необходимо заключать в кавычки, если он содержит пробелы (которые всегда имеет% path%).Имейте в виду, что если последний символ в вашем% path% является обратной косой чертой, он будет избегать завершающей кавычки, а последняя запись пути перестанет работать.Я могу обойти это, добавив точку с запятой перед закрывающей кавычкой.

Если вы не хотите рисковать, получив ";;;;;;"в конце вашего пути после повторных запусков, вместо этого удалите все завершающие обратные слеши из переменной% path% перед установкой, и она будет работать правильно.

22 голосов
/ 29 июня 2011

Если вы хотите сделать это в пакетном файле, используйте команду reg , чтобы изменить значение пути в реестре в HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Ключ среды.

Что-то вроде:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath"

Убедитесь, что путь в переменной% path% совпадает с системным путем.

17 голосов
/ 24 апреля 2012

Как отметил wizlb, выполнение

setx PATH "%cd%;%path%;" -m

скопирует локальный env в системный env, а без -m скопирует системный env в env пользователя.Ни то, ни другое не желательно.Чтобы точно отредактировать только одну часть реестра (система или пользователь, система в моем примере ниже), вам нужно сделать следующее:

for /F "tokens=2* delims= " %%f IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx.exe PATH "%OLD_SYSTEM_PATH%;%OTHER_STUFF%;" -m

Кредит за решение идет в http://www.robvanderwoude.com/ntregistry.php

12 голосов
/ 29 июня 2011

Чтобы сделать это правильно, я думаю, вам действительно нужно выйти за рамки простого пакетного файла. Документация MSDN гласит:

Чтобы программно добавить или изменить системные переменные среды, добавьте их в ключ реестра HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment , а затем передайте WM_SETTINGCHANGE сообщение с lParam , установленным в строку «Environment». Это позволяет приложениям, таким как оболочка, получать ваши обновления.

Прежде всего, вы не сможете писать в этот ключ без запроса повышения прав UAC. Это лучше всего организовать, добавив соответствующий манифест в исполняемый файл. Во-вторых, вещание WM_SETTINGCHANGE не просто из командного файла.

На вашем месте я бы написал короткое и простое консольное приложение для выполнения этой работы.

4 голосов
/ 01 февраля 2015

Простое (может быть и лучше) решение - использовать PathMgr.cmd

Вниз по pathmgr_1.0.2.zip в https://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

Разархивируйте и поместите pathmgr.cmd в ту же папку, что и ваш командный файл, затем в своем командном файле напишите эти две строки:

call pathmgr.cmd /del %cd% /y
call pathmgr.cmd /add %cd% /y

Это будет:

1) обновлять только переменную пользователя PATH, 2) не будет включать системный PATH несколько раз

Вы также можете запускать пакетный файл несколько раз, и он будет включать только ваш текущий путь ОДИН РАЗ в ПУТИ.

0 голосов
/ 21 октября 2016

Используйте эту команду setx PATH "% PATH%;% MVN_HOME% \ bin \"

В любом случае он не будет установлен в текущем сеансе, вам нужно использовать

set PATH = "% PATH%;% MVN_HOME% \ bin \"

0 голосов
/ 11 января 2016

Предполагается, что я хочу создать переменную системной среды с именем "ZIP_PROGRAM" и указать ее на исполняемый файл по пути "reg add C: \ Program Files \ 7-Zip \ 7z.exe

В командной строке DOS я выполню следующее:

Шаг 1: выполнить следующий код reg добавьте "HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment" / v ZIP_PROGRAM / t REG_SZ / d "C: \ Program Files \ 7-Zip \ 7z.exe" / f

Шаг 2: выйдите из системы, затем войдите

Шаг 3: Откройте DOS Prompt и выполните: "set z", и вы должны увидеть обновление системной переменной

...