我从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时间,我应该做哪些修改?
谢谢。
答案 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%