windows批处理可实现轻量级服务监控与日报表生成:一、每分钟用sc query+findstr检测服务状态并延时;二、按日期动态命名日志文件;三、凌晨用find统计运行率并生成html报表;四、支持权限校验、多服务轮询及异常告警。
用 windows 批处理(.bat)直接监控服务状态并生成每日报表,虽不如 powershell 灵活,但胜在轻量、免依赖、开机即跑。关键在于分三步走:定时查服务、记录状态、汇总成报。下面说清楚怎么落地。
一、基础服务状态检测(每分钟轮询)
批处理本身不支持“后台常驻”,但可用 循环 + 延时 模拟实时监控。例如检查 Print Spooler 服务是否运行:
- 用 sc query Spooler 获取服务状态,再用 findstr 提取关键词 “RUNNING”
- 成功时写入时间戳和 “OK”,失败时写入 “STOPPED” 并可触发重启(需管理员权限)
- 用 ping -n 61 127.0.0.1 >nul 实现约 60 秒延时(避免高频查询)
二、日志按天归档(自动创建日期文件)
每天生成独立日志,避免单文件膨胀。核心是动态构造文件名:
- 用 %date:~0,4%%date:~5,2%%date:~8,2% 提取形如 20260721 的日期
- 每次检测结果追加到 svc_log_%date:~0,4%%date:~5,2%%date:~8,2%.txt
- 示例行:2026-07-21 06:45:22 | Spooler → RUNNING
三、每日报表生成(凌晨自动生成汇总)
不用额外工具,纯批处理就能统计当日服务在线率:
- 用 find /c "RUNNING" 和 find /c "STOPPED" 分别统计成功/失败次数
- 用 set /a 计算运行率(如:100 * %ok% / (%ok% + %fail%))
- 输出为 HTML 或纯文本报表,含日期、总检测次数、上线率、首次/末次异常时间
- 建议配合任务计划程序,在每天 00:05 运行一次报表生成脚本,读取当天日志并存为 report_20260721.html
四、实用增强点(不难加,很管用)
让脚本更可靠、更易维护:
- 权限检查:开头加 net session >nul 2>&1 || (echo 请以管理员身份运行 & pause & exit /b)
- 服务多选:把服务名写进变量 set svcs=Spooler Dhcp WinRM,用 for 循环遍历
- 异常标记:连续 3 次 STOPPED 就写入 “ALERT” 并弹窗提醒(msg * "Spooler 异常中断")
- 日志轮转:每月初自动压缩上月日志为 zip(需系统有 makecab 或调用 PowerShell 压缩)











