DOS - ping 결과에서 평균 응답 시간값 추출하기
가끔 ^^ DOS 배치 파일을 다룰 일이 있습니다. 이번에는 ping 실행 결과에서 시간값을 추출해야 하는 상황이 발생했는데요. 보통, ping의 결과가 다음과 같은데,
C:>ping 164.124.101.2
Pinging 164.124.101.2 with 32 bytes of data:
Reply from 164.124.101.2: bytes=32 time=7ms TTL=51
Reply from 164.124.101.2: bytes=32 time=8ms TTL=51
Reply from 164.124.101.2: bytes=32 time=9ms TTL=51
Reply from 164.124.101.2: bytes=32 time=8ms TTL=51
Ping statistics for 164.124.101.2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 7ms, Maximum = 9ms, Average = 8ms
원하는 것은 마지막 "Average = 8ms"에서 "8"이라는 숫자값입니다. (물론, 100도 될 수 있겠지요.)
먼저 실행 결과를 변수에 담아야 합니다.
@ECHO OFF
FOR /F "tokens=*" %%i in ('ping -n 2 164.124.101.2') do SET TOOLOUTPUT=%%i
위와 같이 하면 TOOLOUTPUT 변수에는 Ping 실행 결과의 마지막 라인에 해당하는 내용이 보존됩니다.
%TOOLOUTPUT% == "Minimum = 8ms, Maximum = 10ms, Average = 8ms"
토큰을 기준으로 분리를 하여 "8ms"라는 값을 다음과 같은 실행문으로 추출할 수 있습니다.
for /f "tokens=9 eol=," %%f in ("%TOOLOUTPUT%") do set avgText=%%f
참고로, 각 토큰별 문자열 매핑은 다음과 같습니다.
tokens = 1 : Minimum
tokens = 2 : =
tokens = 3 : 8ms
tokens = 4 : Maximum
tokens = 5 : =
tokens = 6 : 10ms
tokens = 7 : Average
tokens = 8 : =
tokens = 9 : 8ms
그럼, 이야기가 다 끝난 것 같군요. ^^ "8ms"라는 문자열 역시 "ms"라는 토큰으로 분리를 하면 되니까요.
for /f "tokens=1 delims=m" %%a in ("%avgText%") do set str=%%a
echo %str%
위의 마지막 문장에서 echo로 찍힌 값이 바로 대상 컴퓨터에 ping으로 실행한 경우 걸린 평균 응답 시간이 됩니다.
참고로, 위의 문제를 푸는데 다음의 글에서 많은 도움을 얻었습니다. ^^
DOS - String Manipulation
; http://www.dostips.com/DtTipsStringManipulation.php
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]