下面是我目前正在使用的批处理文件,但是我想要将它变为特征,以便它不仅仅是绿色,如果链接是好的,如果它超时则为红色。如果响应不在特定范围内,我希望它变黄。因此,如果我的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
答案 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。如果您想要一个不同的变量,也可以更改“匹配”。