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

如何用批处理脚本将Ping命令结果分为在线、离线、过期三类?

批处理Ping结果分类脚本:区分online/offline/expired

需求:执行Ping命令,将目标IP状态分为online(在线)、offline(离线)、expired(TTL过期)三类,原脚本仅能实现两类分类,且存在语法错误。

原错误脚本

ping -n 1 %ip% | find "TTL"
if errorlevel 1 set error= offline
if errorlevel 0 | find "expired"
if errorlevel 0 set error=expired
else set error=online

问题分析:

  • 第三行的find "expired"无输入源,前一个ping | find "TTL"已消耗Ping输出,无法被后续命令读取;
  • 批处理if语法错误,else必须与对应if在同一行或用括号包裹;
  • 仅执行ping -n 1易因单次丢包误判,建议用-n 4(默认次数)提升准确性。

三类Ping返回示例

在线设备(online)

Pinging pcName [ip] with 32 bytes of data:
Reply from ip: bytes=32 time=1ms TTL=125
Reply from ip: bytes=32 time=1ms TTL=125
Reply from ip: bytes=32 time=1ms TTL=125
Reply from ip: bytes=32 time=1ms TTL=125

Ping statistics for ip:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 1ms, Average = 1ms

离线设备(offline)

Pinging pcName [ip] with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for ip:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

TTL过期(expired)

Pinging pcName [ip] with 32 bytes of data:
Reply from ip: TTL expired in transit.
Reply from ip: TTL expired in transit.
Reply from ip: TTL expired in transit.
Reply from ip: TTL expired in transit.

Ping statistics for ip:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

修复后的脚本

高效单行遍历版(仅执行一次Ping)

@echo off
set "error=offline"
:: 遍历Ping输出的每一行,优先匹配TTL过期状态
for /f "delims=" %%a in ('ping -n 4 %ip%') do (
    echo %%a | findstr /i "TTL expired" >nul && set "error=expired" && goto :end_check
    echo %%a | findstr /i "TTL=" >nul && set "error=online"
)
:end_check
echo IP %ip% status: %error%

简洁管道版(执行两次Ping,适合对效率要求不高的场景)

@echo off
set "error=offline"
ping -n 4 %ip% | findstr /i "TTL expired" >nul && set "error=expired" || (
    ping -n 4 %ip% | findstr /i "TTL=" >nul && set "error=online"
)
echo IP %ip% status: %error%

脚本说明

  1. 默认将error设为offline;
  2. 优先检查TTL expired字符串,匹配到直接标记为expired并终止遍历,避免被正常TTL覆盖;
  3. 未匹配到过期状态时,检查是否存在TTL=(在线设备的正常回复),匹配则标记为online;
  4. 若均未匹配,保持默认的offline状态。

内容的提问来源于stack exchange,提问作者MatissePriem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:33:13