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

Я пытаюсь установить переменную среды PATH в Windows 7 с помощью bat файла; однако он не работает.

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

set PATH=%cd%;%path%
pause

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

Простым (может быть, лучше) решением является использование 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 несколько раз

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

Ответ 6

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

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

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

Ответ 7

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

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

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