西海岸より

つらつらざつざつと

pingによる複数サーバの死活監視バッチ(簡易)

pingを連続して打っても見にくいので、少しバッチを書いてみたときのメモ。

@echo off
@setlocal enabledelayedexpansion

for %%h in (66.249.89.159 www.yahoo.co.jp www.google.co.jp hoge) do (
	set RESULT=
	for /f "usebackq tokens=*" %%i in (`ping -n 1 %%h`) do (
        set RESULT=!RESULT!%%i^


	)
	set _RET=
	echo !RESULT! > _PING_RESULT
	call :SUB %%h
)
goto :EOF

:SUB
for %%J in (expired Destination Request could) do (
	type _PING_RESULT | find "%%J" > _TEMP
	if "!ERRORLEVEL!"=="0" (
	        for /f "usebackq tokens=*" %%i in (`type _TEMP`) do set _RET=!_RET!%%i
	        echo NG - %1 - !_RET!
	        goto SUB_END
	)
)

type _PING_RESULT | find "Reply from" > _TEMP
if "!ERRORLEVEL!"=="0" (
        for /f "usebackq tokens=*" %%i in (`type _TEMP`) do set _RET=!_RET!%%i
        echo OK - %1 - !_RET!
)
:SUB_END
exit /B
  • 実行結果
C:\test\test100208>ping-hosts.bat
NG - 66.249.89.159 - Request timed out.
OK - www.yahoo.co.jp - Reply from 124.83.139.191: bytes=32 time=19ms TTL=128
OK - www.google.co.jp - Reply from 66.249.89.99: bytes=32 time=10ms TTL=128
NG - hoge - Ping request could not find host hoge. Please check the name and try again.

コマンドの実行結果の保存がうまくいかず、ファイルを作成してしまうところがいけてない。。
ちなみにpingは、%ERRORLEVEL%だけではステータス判断できないので(TTL expiredなど)こうなってしまった。