2

Я хотел бы получить доступ к обновленной переменной среды во 2-ом пакетном файле, который постоянно изменяется с помощью 1-го пакетного файла.

E.var постоянно меняется с использованием 1-го пакетного файла, но я получаю только одно значение, назначенное переменной E.varvar после запуска 2-го пакетного файла.

Например:

1-й пакетный файл:

:start   
setx ev=%random%
sleep 5s
goto start:

2-й пакетный файл:

:start    
echo %ev%
sleep 10s  
goto start:

2 ответа2

5

Вероятно, существует некоторое недопонимание относительно переменных среды. Они не разделяются между запущенными процессами (подумайте обо всем хаосе, к которому это может привести), но каждый процесс выполняется в своей собственной среде.

Изменение переменной среды ev процесса A не повлияет на установку или изменение переменной среды ev процесса B.

Новая среда для запуска процесса создается путем копирования среды его "родителя" - процесса, который его запустил. Вот почему вы все еще видите значение, когда-то установленное в переменную среды ev в процессе A. Оно скопировано в среду вашего нового процесса, выполняющего 2-й пакет.

В то время как переменная ev в среде A постоянно меняется, переменная ev в среде B будет оставаться постоянной.

1

Эти 2 файла .bat отлично работают при запуске в 2 отдельных окнах командной строки

1st.bat:

@echo off
:start
setx ev %random%
timeout /t 5 /nobreak >nul
goto start:

2nd.bat:

@echo off
:start
for /f "tokens=2*" %%A in ('REG QUERY "HKCU\Environment" /v ev ^|FIND "ev"') DO set ev=%%B
echo %ev%
timeout /t 10 /nobreak >nul
goto start:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .