将服务器从txt源ping到列出Pingtimes

时间:2013-06-27 09:35:57

标签: batch-file ping

我从stackoverflow获取此脚本,用于从.txt源(testservers.txt)ping多个地址,以输出到另一个.txt文件(result.txt)

    @echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt
>nul copy nul %OUTPUT_FILE%
for /f %%i in (testservers.txt) do (
    set SERVER_ADDRESS=ADDRESS N/A
    for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
        if %%x==Pinging set SERVER_ADDRESS=%%y
        if %%x==Reply set SERVER_ADDRESS=%%z
        if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)
    )
    echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE%
)

它只列出服务器状态,如果我想要显示平均ping时间,我应该做哪些修改?

谢谢。

1 个答案:

答案 0 :(得分:0)

此脚本将远程主机作为第一个(也是唯一的)参数。 样本数(_COUNT)是硬编码的,但可配置。 只有三个DEBUG线才能检查结果。一旦您确信它能产生正确的输出,就可以删除它们。

我不知道ping是否会以毫秒以外的时间报告时间。如果确实如此,那么需要在替换中考虑一些(并且可能保存在变量中的单位)。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET _HOST=google.com
IF NOT "%~1"=="" SET "_HOST=%~1"

:: number of ICMP echo attempts (for a better average)
SET _COUNT=10

SET _SUM=0
SET _DEBUG=
FOR /F "tokens=5" %%l IN ('ping -n %_COUNT% %_HOST%') DO (
    FOR /F "delims== tokens=1,2" %%t IN ("%%~l") DO (
        IF "%%~t"=="time" (
            SET _TIME=%%u
            SET _DEBUG=!_DEBUG! %%u
            SET _TIME=!_TIME:^<=!
            SET /A _SUM = !_SUM! + !_TIME:ms=!
        )
    )
)
SET /A _AVG = %_SUM% / %_COUNT%

@ECHO Average ping time for %_HOST%: %_AVG% ms
@ECHO DEBUG: %_DEBUG%