Вопрос: Как постоянно обновлять переменную среды в пакетном файле


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

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

Например:

1-й командный файл:

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

2-й командный файл:

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

2
2018-03-10 13:37


Источник


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


Ответы:


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

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

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

Хотя переменная ev в среде A постоянно меняет переменнуюev в среде B будет оставаться постоянным.


5
2018-03-10 14:24





Эти 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:

1
2018-03-10 14:33