1

我从 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 时间,我应该进行哪些修改?

谢谢你。

4

1 回答 1

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%
于 2013-06-27T12:20:51.850 回答