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

Можно ли создать командный файл, который может вносить постоянные изменения в переменную среды?

Например, мой сценарий installer.bat копирует некоторые файлы в случайное место в файловой системе компьютера. Я хотел бы добавить это местоположение в переменную среды PATH, чтобы программы можно было запускать в текущем сеансе.

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

Я бы хотел сделать что-то вроде этого:

rem install_and_run.bat
install.bat 
myapplication.exe 

К сожалению, это не работает, потому что install.bat никогда не «возвращается» к основному скрипту. myapplication.exe никогда не вызывается. Далее я попробовал:

cmd /C install.bat
myapplication.exe 

К сожалению, это не работает, потому что это означает, что install.bat запускается в отдельной оболочке cmd.exe. Это означает, что ни одно из изменений переменной среды не сохраняется после завершения сценария, потому что cmd.exe также завершается.

Должен быть способ создать командный файл, который изменяет переменные среды.

Какие-либо предложения?


person Salim Fadhley    schedule 28.01.2009    source источник


Ответы (3)


В вашем случае вы хотите

rem install_and_run.bat
call install.bat 
myapplication.exe

То есть используйте call для вызова install.bat, чтобы управление вернулось к install_and_run.bat.

Я думаю, вы не понимаете, что переменные среды для каждого процесса. Ваш командный файл выполняется в экземпляре cmd.exe, и у этого экземпляра есть среда. Когда вы написали cmd /C, вы создавали новый экземпляр cmd.exe, у которого есть собственная среда. Затем install.bat вносил «постоянные» изменения в среду нового экземпляра cmd.exe.

person Jay Bazuzi    schedule 28.01.2009

ну, вы могли бы сделать:

Установить EnvVariableName = "Некоторое значение"

Что касается вашего вызова отдельного командного файла из другого командного файла, я считаю, что команда вызова вернет

rem install_and_run.bat
call install.bat
myapplication.exe

person cbeuker    schedule 28.01.2009

Вы не можете создать или изменить переменную среды и сохранить ее между сеансами консоли из пакетного сценария AFAIK.

У меня есть сценарий VBScript с оболочкой пакетного сценария, который я использую для этого, но я думаю, что у Джея есть для вас правильное решение. Если хотите, я могу опубликовать свой код.

person Patrick Cuff    schedule 28.01.2009