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

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

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

set PATH=%cd%;%path%
pause

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

7 ответов

Решение

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

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

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

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

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

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

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

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

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

Как отметил 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

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

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

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

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

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

Вниз по пути mgr_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 несколько раз

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

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

Я буду выполнять следующее в DOS Prompt:

Шаг 1: выполните следующий код и добавьте "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", и вы должны увидеть обновление системной среды.

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

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

установить PATH="%PATH%;%MVN_HOME%\bin\"

Другие вопросы по тегам