批处理脚本求助:Ping指定IP时网络状态联动窗口颜色与超时计时
批处理实现Ping状态计时变色方案
你的现有代码会在单次Ping失败时立刻切换颜色,但要实现「持续断开超时后才变色」的需求,需要加入状态计数器来跟踪断开时长,只有累计断开达到设定阈值时才触发颜色变化,网络恢复时立刻重置状态。
修改后的代码
@echo off setlocal enabledelayedexpansion :: 配置参数 set "target_ip=10.44.32.12" set "normal_color=0E" :: 网络正常时的颜色(黑底黄字) set "error_color=CE" :: 网络断开超时后的颜色(灰底黄字) set "timeout_threshold=5" :: 断开超时阈值(单位:秒,和下面的延迟对应) set "disconnect_count=0" :: 断开时长计数器 set "current_color=%normal_color%" :: 初始化窗口颜色 color !current_color! title TEST :top :: Ping目标IP,仅发送1个包,超时2秒 ping !target_ip! -n 1 -l 1 -w 2000 | find "TTL=" >nul if not errorlevel 1 ( :: 网络正常:重置计数器,若当前颜色不对则切换 set "disconnect_count=0" if "!current_color!" neq "!normal_color!" ( set "current_color=!normal_color!" color !current_color! echo Network restored. ) ) else ( :: 网络断开:计数器加1 set /a disconnect_count+=1 echo Request timed out. Count: !disconnect_count! :: 达到超时阈值且未切换错误颜色时,触发颜色变更 if !disconnect_count! geq !timeout_threshold! ( if "!current_color!" neq "!error_color!" ( set "current_color=!error_color!" color !current_color! echo Network disconnected for !timeout_threshold! seconds - color changed. ) ) ) :: 延迟1秒(ping本地回环地址,-n 2对应约1秒间隔) ping -n 2 -l 10 127.0.0.1 >nul goto top
关键逻辑说明
- 延迟扩展
enabledelayedexpansion:批处理循环内修改变量时,必须启用延迟扩展才能实时读取变量值,否则会始终使用变量初始值。 - 状态计数器
disconnect_count:每次Ping失败就累加计数,网络恢复时重置为0,只有累计达到设定的timeout_threshold时才切换错误颜色。 - 颜色按需切换:每次状态变化时先判断当前颜色是否符合目标,避免重复执行
color命令导致窗口闪烁。 - 参数可配置:开头的变量可以根据需求修改,比如调整超时时间、颜色代码、目标IP。
颜色代码参考
批处理的color命令格式为[背景色][前景色],常用颜色代码:
- 0=黑, 1=蓝, 2=绿, 3=浅绿, 4=红, 5=紫, 6=黄, 7=白, 8=灰, 9=浅蓝, A=浅绿, B=浅青, C=浅红, D=浅紫, E=淡黄, F=亮白
内容的提问来源于stack exchange,提问作者Kelvinpogs
相关产品推荐
相关产品推荐

