0

以下、現在使用しているバッチファイルですが、リンクが良ければ緑、タイムアウトしたら赤だけではないように変更したいと思います。応答が特定の範囲内にない場合は黄色に変わりたいです。したがって、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
4

2 に答える 2

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=、出力の文字列になります。行が見つかった場合は、文字=<を区切り文字として使用してトークン化され、3 番目のトークン (rtt が配置されている場所) が取得され、mfrommsを使用して rtt の数値が区切られます。

rtt 時間で、レベルのリスト内の値 (レベル:色のペア) が繰り返されます。各値について、レベルと色が分離され、レベルが rtt に対してテストされます。rtt がレベル以上の場合、減色された色が見つかりました。

色が変更され、情報が出力され、コードは新しい反復を開始する前に待機します

于 2014-11-12T11:37:57.947 に答える
0

これはBatch ERRORLEVEL ping responseと結びついていると信じているので、そこから回答を再投稿します。

答えはジョンの功績です〜

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

これは0、ping が失敗した1場合、成功した場合に表示されます。ping の数をカスタマイズできるように、"0% の損失" (具体的には 4 つの ping ではありません) を探すようにしました。

パーセント記号は、代​​入する必要がある変数と間違えないように 2 倍になっています。

このFORトリックは、コマンドの出力を環境変数の値として設定するだけです。

「racer」を ip に編集する必要があります。別の変数が必要な場合は、「一致」を変更することもできます。

于 2014-11-12T11:39:27.203 に答える