2013-06-27 43 views
1

我已得到计算器此脚本从.txt源(testservers.txt)执行ping多个地址输出到另一个.txt文件(的Result.txt)执行ping服务器,列出Pingtimes

@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时间,应该做些什么修改?

谢谢。

回答

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%