Оптимизированный способ сортировки по серверам и определения самого быстрого пинга - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь определить максимальную скорость пинга из числа серверов в сети.Количество серверов может достигать пары десятков.У меня есть сценарий, как показано ниже, который будет сортировать по нескольким в данный момент, и он работает хорошо, но я ищу более элегантный способ сделать это.Список серверов также может быть сохранен в текстовом файле.На самом деле текстовый файл для имен серверов может быть проще в обслуживании, так как они могут меняться со временем.

РЕДАКТИРОВАТЬ: Этот сценарий также не обрабатывает, если сервер отключен, поэтому я мог случайно оказаться в автономном режиме серверав списке самых быстрых пингов.

SET SERVER_A=MEDUBNA2
SET SERVER_B=HANSECAD2
SET SERVER_C=MEINWESSFS01
SET SERVER_D=MEAUHWC01

for /f "tokens=2 delims==," %%a in ('ping %SERVER_A% -n 1 -w 1000') do SET MINSERVER_A=%%a
for /f "tokens=2 delims==," %%b in ('ping %SERVER_B% -n 1 -w 1000') do SET MINSERVER_B=%%b
for /f "tokens=2 delims==," %%c in ('ping %SERVER_C% -n 1 -w 1000') do SET MINSERVER_C=%%c
for /f "tokens=2 delims==," %%d in ('ping %SERVER_D% -n 1 -w 1000') do SET MINSERVER_D=%%d

SET MINSERVER_A=%MINSERVER_A:~0,-2%
SET MINSERVER_B=%MINSERVER_B:~0,-2%
SET MINSERVER_C=%MINSERVER_C:~0,-2%
SET MINSERVER_D=%MINSERVER_D:~0,-2%


if %MINSERVER_A% lss %MINSERVER_B% (
    SET FASTESTSERVERGROUP1=%SERVER_A%
    ) else (
    SET FASTESTSERVERGROUP1=%SERVER_B%
)

if %MINSERVER_C% lss %MINSERVER_D% (
    SET FASTESTSERVERGROUP2=%SERVER_C%
    ) else (
    SET FASTESTSERVERGROUP2=%SERVER_D%
)

if %FASTESTSERVERGROUP1% lss %FASTESTSERVERGROUP2% (
    SET FASTESTSERVEROVERALL=%FASTESTSERVERGROUP1%
    ) else (
    SET FASTESTSERVEROVERALL=%FASTESTSERVERGROUP2%
)

echo %SERVER_A%: %MINSERVER_A%
echo %SERVER_B%: %MINSERVER_B%
echo %SERVER_C%: %MINSERVER_C%
echo %SERVER_D%: %MINSERVER_D%

echo Fastest Server Group 1: %FASTESTSERVERGROUP1%
echo Fastest Server Group 2: %FASTESTSERVERGROUP2%


:: Ultimate goal is to determine the fastest server out of the list.
echo Fastest Server Overall: %FASTESTSERVEROVERALL%

1 Ответ

0 голосов
/ 13 декабря 2018

Все, что вам нужно сделать, - это создать пару вложенных FOR команд для чтения списка серверов.Затем пропингуйте сервер.Управляйте выводом так, чтобы он имел только цифры.Затем сравните число с текущим самым быстрым.

@echo off
setlocal enabledelayedexpansion
set "ms=10000"
set "fastest="
REM Read the server list
FOR /F "delims=" %%G IN (serverlist.txt) DO (
    REM read the ping results
    for /f "tokens=2 delims==," %%H in ('ping %%G -n 1 -w 1000 ^|find /i "minimum"') do (
        REM Manipulate the ping result so that it is only a number
        for /f "delims=m " %%I in ("%%H") do (
            REM Compare the ping result to the current fastest time.
            IF %%I LSS !ms! (
                set "fastest=%%G"
                set "ms=%%I"
            )
        )
    )
)
echo Fastest Server is: %fastest%
pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...