Как постоянно установить переменную в 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\"