我想访问第二个批处理文件中更新的环境变量,该变量正在使用第一个批处理文件不断地变化。
使用第一个批处理文件时,e.var 不断变化,但启动第二个批处理文件后,我只得到分配给 E.variable 的一个值。
例如:
第一批文件:
:start
setx ev=%random%
sleep 5s
goto start:
第二批处理文件:
:start
echo %ev%
sleep 10s
goto start:
答案1
可能对环境变量有一些误解。这些是不是在正在运行的进程之间共享(想想这会导致的所有混乱),但是每一个进程在它的自己的环境。
改变进程 A 的环境变量ev
不会影响设置或改变ev
进程 B 的环境变量。
启动过程的新环境由以下方式创建:复制其“父进程”的环境(启动它的进程)。这就是为什么您仍然会看到在进程 A 中设置为环境变量的值。ev
它被复制到运行第二个批处理的新进程的环境中。
当 A 的环境中的变量ev
不断变化时,B 的环境中的变量ev
将保持不变。
答案2
这两个.bat
文件在两个单独的命令提示符窗口中运行时工作正常
第1个脚本:
@echo off
:start
setx ev %random%
timeout /t 5 /nobreak >nul
goto start:
第二个.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: