Ping批处理文件颜色错误级别

时间:2014-11-12 08:40:55

标签: batch-file ping errorlevel request-timed-out

下面是我目前正在使用的批处理文件,但是我想要将它变为特征,以便它不仅仅是绿色,如果链接是好的,如果它超时则为红色。如果响应不在特定范围内,我希望它变黄。因此,如果我的RTT范围不在130-190毫秒内,它将变为黄色。提前致谢

如果屏幕落在某个范围内,我希望屏幕为绿色;如果屏幕落在范围之外,我希望屏幕显示为黄色;如果请求超时则显示为红色。

echo off & cls

TITLE = Test

:top

ping -n 1 8.8.8.8 | FIND "TTL="

IF ERRORLEVEL 1 (SET OUT=4F & echo Request timed out.) ELSE (SET OUT=2F)

color %OUT%

ping -n 3 -w 1000 127.0.0.1 >nul

GoTo top

2 个答案:

答案 0 :(得分:1)

已修改以适应评论

@echo off
    setlocal enableextensions enabledelayedexpansion

    rem Get address from command line
    set "address=%~1"
    if not defined address set "address=127.0.0.1"

    rem Configure levels and colors 
    rem The format is initialValue:color in value descending format
    set "levels=9000:4f 500:5f 130:e0 0:a0"

    rem infinite loop
    for /l %%i in () do (
        rem retrieve information from ping command
        set "rtt=9999"
        set "ttl=?"
        for /f "tokens=3,4 delims==^<" %%a in (
            'ping -n 1 "%address%" ^| find "TTL="'
        ) do for /f "tokens=1 delims=m" %%c in ("%%a") do (
            set /a "rtt=%%c"
            set "ttl=%%b"
        )

        rem retrieve color
        set "color="
        for %%z in (%levels%) do for /f "tokens=1,2 delims=:" %%a in ("%%z") do (
            if not defined color if !rtt! geq %%a set "color=%%b"
        )

        rem show information
        if defined color color !color!
        echo(!time! - %address% - rtt[!rtt!] ttl[!ttl!]

        rem save to log
        for /f "tokens=1-4 delims=.:-/ " %%a in ("!date!") do (
            >> "pingLog_%%a%%b%%c%%d.txt" echo(!time! - %address% - rtt[!rtt!] ttl[!ttl!]
        )

        rem wait and repeat the process
        ping -n 3 localhost >nul 2>nul 
    )

它只是重复一个无限循环检查指示的地址(在此代码中从命令行中获取)。

在每次迭代中,确定来自ping命令的当前rtt,根据rtt选择的颜色以及在颜色改变的情况下回显到控制台的信息。

要获得rtt,执行ping。如果主机处于活动状态,则输出中将为TTL=字符串。如果找到该行,则使用字符=<作为分隔符对其进行标记,以获取第三个标记(rtt所在的位置),然后m中的ms用于分隔rtt的数值。

使用rtt时间,迭代级别列表中的值(对级别:颜色)。对于每个值,级别和颜色是分开的,并且级别再次测试rtt。如果rtt大于或等于水平,我们就找到了适当的颜色。

在开始新的迭代之前,颜色已更改,信息已打印且代码等待

答案 1 :(得分:0)

我相信这与Batch ERRORLEVEL ping response有关, 所以我只是从那里重新发布答案。

感谢Jon回答〜

@echo off
for /f %%i in ('ping racer ^| find /c "(0%% loss)"') do SET MATCHES=%%i
echo %MATCHES%

如果ping失败,则打印0,如果成功则打1。我只是寻找“0%损失”(不是特别是4个ping),以便可以定制ping的数量。

百分号已加倍,因此不会误认为应该替换的变量。

FOR技巧仅用于将命令的输出设置为环境变量的值。

你需要编辑“racer”到ip。如果您想要一个不同的变量,也可以更改“匹配”。