Как я могу сделать пакетный файл Windows, который изменяет переменную среды? - PullRequest
3 голосов
/ 28 января 2009

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

Например, мой скрипт 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 также завершается.

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

Есть предложения?

Ответы [ 3 ]

6 голосов
/ 28 января 2009

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

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.

1 голос
/ 28 января 2009

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

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

1 голос
/ 28 января 2009

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

Set EnvVariableName = "Некоторое значение"

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

rem install_and_run.bat
call install.bat
myapplication.exe

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...