首先得确定这两个CMD的关系,是并行进程,还是继承进程
继承关系就不用再说了,方法很多,并行的,楼主也讲了,可以通过全局环境变量来传递,这个其实是可行的,因为变量更改是在另一个CMD进程中提交的,所以在当前CMD进程中并没有直接刷新(通常是赋值才会刷新),也是一个变量扩展延时的问题,在试验时可以使用call set 本地变量=全局变量 来获取实时更新
:batch1
@echo off
title batch1
start batch2.bat
for %%a in (在不 好像没人 Exit) do (
ping -n 2 127.1>nul
at %time:~0,-3% ImBatch1 %%a >nul 2>nul
)
batch2
@echo off
(title batch2)&(mode con cols=20 lines=10)
:batch2
ping -n 1 127.1>nul
for /f "tokens=1,5*" %%a in ('at ^|find " ImBatch1 "') do (set "n=%%a" &set "info=%%b")
if /i "%info%"=="exit" (at %n% /del &exit)
::如果%n%非空,说明找到了ImBatch1发来的信息.
if not "%n%"=="" (
echo,%info%
at %n% /del
set "info="
set "n="
)
goto :batch2
;main.bat
@echo off
::置唯一标题
title benton
::取指定程序的PID,保存备用
for /f "tokens=2" %%a in ('TASKLIST /FI "WINDOWTITLE eq benton*" /fo "table" /nh') do set PID=%%a
start /b bbba.bat
:lp
title %date% %time:~0,-3%
ping 127.1 -n 2 >nul
::根据保存的PID取标题信息
for /f "tokens=9*" %%a in ('TASKLIST /FI "pid eq %PID%" /v /nh') do set mesg=%%b
if /i not "%mesg:~0,4%"=="quit" goto :lp
echo.正常退出
goto :eof