コメントに適応するように編集
@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=
、出力の文字列になります。行が見つかった場合は、文字=<
を区切り文字として使用してトークン化され、3 番目のトークン (rtt が配置されている場所) が取得され、m
fromms
を使用して rtt の数値が区切られます。
rtt 時間で、レベルのリスト内の値 (レベル:色のペア) が繰り返されます。各値について、レベルと色が分離され、レベルが rtt に対してテストされます。rtt がレベル以上の場合、減色された色が見つかりました。
色が変更され、情報が出力され、コードは新しい反復を開始する前に待機します