2017-02-25 7 views
-2

IP 목록을 핑 (ping)하고 세 가지 IP를 출력하는 도구를 만들려고합니다. 서버에 도달하는 가장 낮은 ms (시간).Windows 배치 - IP 목록을 ping하고 가장 낮은 ms (시간)를 사용하여 세 개의 IP를 출력하는 도구 만들기

입력 : 등 1.1.1.1 1.1.1.2 1.1.1.3로 spaces- 등로 구분 된 IP의 -list

출력 : 가장 낮은 MS의 순서로 가장 낮은 MS-와 -THE 세 개의 IP를 (3 왼쪽에 이러한 1.1.2.2 1.2.3.3 1.4.4.4

으로 오른쪽에 가장 낮은 밀리 초) 지금까지 핑 부분이 있습니다

@echo off 
set ip=8.8.8.8 
for /f "tokens=4 delims=(=" %%a IN ('ping %ip% -n 1 ^|find "Average = "') do echo Result is %%a 
pause 

이 미니 코드를 출력 각 서버에서 MS 핑.

각 서버의 ping을 찾아 비교해야합니다.

누구나이 모든 도움을받을 수 있습니까? 내가 충분히 상세하지 않고 충분한 세부 사항이나 코드를 보여주지 않으면 미안합니다.

+0

자신의 일하고, 그들은 100 개 이상의 upvotes를 얻습니다. – djmrminer

답변

0
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion 

:: IPs from http://etherealmind.com/what-is-the-best-ip-address-to-ping-to-test-my-internet-connection/ 
Set "IPlist=8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 4.2.2.2 141.1.1.1" 
For %%A in (%IPlist%) Do (
    Set IP=%%A 
    for /f "tokens=6delims==, " %%B in (
    'ping %%A -n 1^|findstr Average' 
) Do (
    Set PingRes=%%B 
    Set /A Avg=100000+!PingRes:ms=! 
    Set MS_!Avg!_!IP:.=!=!IP! 
) 
) 
Echo Show intermediate results 
Set MS_1 

Set Cnt=0 & Set "NewIPlist=" 
For /f "tokens=2,4 delims=_=" %%A in ('Set MS_1') Do (
    Set /A Cnt+=1 
    if !Cnt! gtr 3 Goto :End 
    Set NewIPlist=!NewIPlist! %%B 
) 
:End 
Echo(
Set NewIPlist=%NewIPlist:~1% 
Set NewIPlist 

질문이 있으면 배치가 무엇인지 이해하고 질문하십시오.

샘플 출력

> Measure-IP.cmd 
Show intermediate results 
MS_100013_141111=141.1.1.1 
MS_100013_20867220220=208.67.220.220 
MS_100014_4222=4.2.2.2 
MS_100027_20867222222=208.67.222.222 
MS_100028_8888=8.8.8.8 
MS_100032_8844=8.8.4.4 

NewIPlist=141.1.1.1 208.67.220.220 4.2.2.2 
+0

이는 에코 당신이 할 수있는 방법이다 : 쇼 중간 결과 MS_100013_141111 = 141.1.1.1 MS_100013_20867220220 = 208.67.220.220 MS_100014_4222 = 4.2.2.2 MS_100027_20867222222 = 208.67.222.222 MS_100028_8888 = 8.8.8.8 MS_100032_8844 = 8.8. 4.4 – djmrminer

+1

물론 배치를 이해하는 데 도움이되도록 의도적으로이 줄을 삽입 했으므로 2 개의 관련 줄을 쉽게 식별 할 수 있습니다. [SO]는 도움을 찾고 제공하는 프로그래머를위한 사이트입니다. 최근의 질문들에서 나는 모든 명령이 친숙해야한다는 것을 알지만, 배우기 위해 당신 편에서의 노력을 그리워합니다. 그러므로 당신은 투표를하는 것에 놀라지 말아야합니다. – LotPings

+0

에코 부분을 제거하는 방법을 찾았습니다. 정보를 제공해 주셔서 감사 드리며, 질문을 작성할 때 더 많은 노력을 기울일 것입니다. – djmrminer

0
@echo off 
setlocal EnableDelayedExpansion 

rem Set the list of IP's 
set "IPs=8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 4.2.2.2 141.1.1.1" 

rem Set the number of desired IP's in the output 
set "num=3" 

rem Initialize "MS" array with large numbers 
for /L %%i in (1,1,%num%) do set "MS[%%i]=9999" 

for %%a in (%IPs%) do (
    set "ip=%%a" 
    for /F "tokens=6 delims== " %%b in ('ping %%a -n 1 ^| find "Average = "') do (
     set "ms=%%b" & set "ms=!ms:ms=!" 
     REM ECHO %%a = !ms! 

     rem Insert this ms and ip values in their right position in MS and IP arrays 
     for /L %%i in (1,1,%num%) do if !ms! lss !MS[%%i]! (
     set /A t=MS[%%i], MS[%%i]=ms, ms=t 
     set "t=!IP[%%i]!" & set "IP[%%i]=!ip!" & set "ip=!t!" 
    ) 

) 
) 

echo %IP[1]% (%MS[1]%), %IP[2]% (%MS[2]%), %IP[3]% (%MS[3]%) 

출력 예 : 너희들이 downvote하지만도에 어떤 노력이나 코드를 삽입하지 않는 사람들의 톤이 왜 내가 얻을

208.67.222.222 (42), 208.67.220.220 (44), 4.2.2.2 (47)