У меня есть пакет пакетных файлов, которые я хочу запустить последовательно. Один из них запускает MSI, который добавляет папку в PATH
. Как я могу убедиться, что последующие командные файлы заметят это изменение без перезапуска CMD? Я использую Windows Server 2008 R2 x64.Windows - создание cmd см. Изменения PATH
Я пробовал call
, cmd /c
и start ""
, в надежде, что начало нового процесса будет работать, но это не так.
in run-both-scripts.bat
call script1.bat <-- This runs an MSI which modifies the PATH
call script2.bat <-- This relies on the PATH changes which were made by the MSI in script1.bat
Для уточнения: это довольно легко воспроизвести.
- Начало CMD
- Создайте переменную окружения вручную, не используя
setx
, чтобы имитировать то, что делает MSI.- правой кнопкой мыши на компьютер -> Свойства -> Дополнительные параметры системы -> Переменные среды -> New
- Создайте переменную среды с именем, скажем,
hello
со значениемhi there
.
- В окне CMD введите
echo %hello%
. Вы получите%hello%
. - Старайтесь
cmd /c "echo %hello%
. Вы получите%hello%
. - Попробуйте
start ""
, чтобы открыть новый CMD-процесс; типecho %hello%
. Вы получите%hello%
. - Попробуйте
start "" echo %hello%
, чтобы запустить команду в новом CMD-процессе. Вы получите%hello%
. - Наконец, попробуйте вручную, открыв новое окно CMD в меню «Пуск» и введите
echo %hello%
оттуда. Вы увидитеhi there
.
Таким образом, вы можете видеть, что единственный способ, которым я смог сделать CMD, увидеть изменение переменной среды - перезапустить CMD.
'без перезапуска CMD'? каждая партия перезапустит cmd .... – Endoro
@Endoro Если вы запустите их, нажав на них в проводнике, да. Нет, если вы вводите свои имена в командной строке или автоматизируете их в другом пакетном файле. –
просто сохраните переменную пути в текстовом файле и сравните ее при старте партии. – Endoro