[Windows] 複数宛先へのPing,Traceroute結果を自動保存するバッチ
はじめに
端末からの疎通確認と結果保存を自動化するバッチ。
特徴は下記のとおりです。結局ExPingを使うのがいいかもしれない。
- 複数の宛先へPing,Tracerouteを同時に実行する
- ログを自動的にファイルへ保存する
- かつ、プロンプト上にも結果を出力する
概要
ファイル構成は下記のとおりです。
- 親バッチファイル:疎通先IPを定義する。子バッチファイルを呼び出す役割も持つ。
- 子バッチファイル:疎通確認コマンドを実行し、結果を出力する。
使い方は下記のとおりです。
- 両バッチファイルを同じフォルダへ配置する
- 親バッチファイル内に疎通先IPを定義する
- 親バッチファイルを実行する
中身の説明
実際のバッチファイルです。
コピペで使えますが、remの行は文字化けすると思うので消してください。
親バッチファイル
@echo off rem バッチファイルのある場所をカレントディレクトリにする cd /d %~dp0 rem 括弧内に疎通先IPを半角スペース区切りで定義する。 rem IPは変数%%fに格納され、それをChild.batの引数として使用している。 rem f以外に変えてもOKだが2文字以上の名称にはできないようなので注意。 for %%f in (192.168.1.1 192.168.1.2) do ( start Child.bat %%f )
子バッチファイル
@echo off rem 実行コマンド関連の変数を定義。コマンドオプションは適宜チューニング rem %1にはParent.batから渡されたIPが入っている set DstIP=%1 set PingCommand=ping %DstIP% -w 1 set TracertCommand=tracert -d -w 1000 %DstIP% rem ログファイル名の変数を定義。 rem 1行目は日付を取得しスラッシュを空へ置換(=削除) rem 2行目は時刻を取得し空白を0へ置換 9:00:00.00 → 09:00:00.00 rem これをやらないと一桁台の時刻でバッチにエラーが起きる rem 3行目は上記結果から時,分,秒を切り出し 09:00:00.00→090000 set RunDate=%date:/=% SET tmp=%time: =0% SET RunTime=%tmp:~0,2%%tmp:~3,2%%tmp:~6,2% set Filename= result_%RunDate%_%RunTime%_%DstIP%.txt rem コマンドを実行しファイルへ追記出力 rem 実行結果しか出力されないためどんなコマンドを打ったか証跡が残らない rem そこで重要なコマンドについてはechoを実行して別途出力している rem echo. はただの空行。ログを見やすくするために入れている hostname >> %Filename% ipconfig >> %Filename% echo. >> %Filename% echo %PingCommand% >> %Filename% %PingCommand% >> %Filename% echo. >> %Filename% echo %TracertCommand% >> %Filename% %TracertCommand% >> %Filename% rem ファイルの内容を出力 rem 注意点として、全コマンド完了後に纏めて表示する挙動となる rem よって疎通NG時はTimeout待ちでなかなか表示されず不安になる type %Filename% rem ログの目視確認のため、キーを押すまでウィンドウを閉じないようにする pause exit
使用感
両ファイルを配置。
Parent.batを実行。
実行結果を確認できる。
ログファイルの掲載は割愛。実際に試してみてください。
別解
実行コマンドを宛先毎に変えたい場合は下記のようにする。
宛先IP分だけ子バッチファイルを作成する必要がある。
親バッチファイル
@echo off cd /d %~dp0 rem 同一フォルダにあるchild*.batを全て実行する for %%f in (Child*.bat) do ( start %%f )
子バッチファイル
Child1.bat
@echo off rem DestIPを直接入力 set DstIP=192.168.1.1 set PingCommand=ping %DstIP% -w 1 set TracertCommand=tracert -d -w 1000 %DstIP% (以下略)
同様に、宛先IP分Child*.batを作る
所感
昔作ったやつを記憶を頼りに再現・ブラッシュアップしてみた。
ExPing以外にも今はWSLやPowerShell等のより高等なものがあるので実用性は微妙だが、
思い出として残しておく。