@璐村惂鐢ㄦ埛_000076K馃惥 off & if not "%~1"=="" goto :__%~1
rem
rem 模板对象
rem 22:04 2023/2/14 WyPo
rem
rem 操作 双击脚本直接运行
rem
rem 主对象 struct{};task_csv{}
rem 调用 call :task_csv oCmd
rem 给PID传值 set oCmd.PID=0
rem 给PID传值 set oCmd.%oCmd[2]%=0
rem
:load
setlocal DISABLEDELAYEDEXPANSION
set local=1
set error=0
:include
goto :main
:struct {}
rem
rem 模板初始化
rem
set nul=0
for %%a in (!%~1!) do (
set /a nul+=1
set "%~1[!nul!]=%%~a"
)
goto :break
:task_csv {}
rem
rem 模板定义
set %~1="映像名称","PID","会话名","会话#","内存使用","状态","用户名","CPU时间","窗口标题"
rem
rem 调用模板初始化
call :struct "%~1" "%~2"
rem
goto :break
:main (void){void}
rem
rem 程序主入口
rem
setlocal ENABLEDELAYEDEXPANSION
set /a local+=1
rem
rem 调用"task_csv"模板生成实例名为"oCmd"对象
call :task_csv oCmd
rem
rem 生成一个外部窗口用于查看其变化
set title=[WinCMD]%date% %time%
start "%title%" cmd /c (call "%~0" WinCMD "%title%")
rem
rem 取得外部窗口的所有数值,按模板排列方式进行取值
for /f "tokens=*" %%a in ('call "%~0" taskCSV 9 "%title%"') do (
set cntNum=0
for %%b in (%%a) do (
set /a cntNum+=1
rem
rem 按编号归位
for %%c in (oCmd[!cntNum!]) do set "oCmd.!%%~c!=%%~b"
)
)
rem
rem 查看"oCmd"对象的"PID"值
echo.[提示]开始监测PID对象:_%oCMD.PID%
echo.
rem 循环监测"oCmd"对象的"窗口标题"变化
:main_while[0]
for /f "tokens=*" %%a in ('call "%~0" taskCSV 2 "%oCMD.PID%" 9') do set oCmd.!oCmd[9]!=%%a
echo.对象[%oCmd.PID%]的标题变化:_%oCmd.窗口标题%
goto :main_while[0]
:main_while[0]_eof
:~eof
for /l %%a in (1,1,%local%) do endlocal
goto :eof
:__winCMD (char *sTitle){void}
rem
setlocal ENABLEDELAYEDEXPANSION
set local=1
rem
call :task_csv oCmd
for /f "tokens=*" %%a in ('call "%~0" taskCSV 9 "%~2"') do (
set cntNum=0
for %%b in (%%a) do (
set /a cntNum+=1
for %%c in (oCmd[!cntNum!]) do set "oCmd.!%%~c!=%%~b"
)
)
rem
call "%~0" delay 6
rem
:WinCMD_while[0]
set title=[MyPid:_%oCmd.PID%]%date% %time%
echo.%title%
title %title%
call "%~0" delay 3
goto :%~1_while[0]
:WinCMD_while[0]_eof
goto :~eof
:__delay (int nSecond){void}
for /f "tokens=*" %%a in ('timeout /t %~2 /nobreak') do set nul=
goto :~eof
:__taskCSV (int nInTokens, void *vFindFlag, int *nShowTokens){char *}
rem
setlocal ENABLEDELAYEDEXPANSION
set local=1
rem
set "nInTokens=%~2"
set "vFindFlag=%~3"
set "nShowTokens=0"
rem
for %%a in (%4) do set nShowTokens=%%~a
rem
for /f "tokens=*" %%a in ('tasklist /v /fo csv ^| find /i "%vFindFlag%"') do (
set cntNum=0
for %%b in (%%a) do (
set /a cntNum+=1
if !cntNum! equ %nInTokens% if "%%~b"=="%vFindFlag%" (
if %nShowTokens% equ 0 (
echo.%%a
) else (
set cntShowTokens=0
for %%c in (%%a) do (
set /a cntShowTokens+=1
if !cntShowTokens! equ %nShowTokens% echo.%%c
)
)
)
)
)
goto :~eof
:break