You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:03:18