TeraTermマクロファイルをダブルクリックして使用する場合は、何かエラーがあった場合にmessageboxでエラーを通知して終了させるとエラー原因が判って良いでしょう。しかし、バッチファイルで大量のTeraTermマクロを処理したり、タスクで自動実行させる場合はmessageboxを使用すると処理が止まってしまいます。そんな時は、エラーが発生した際に終了コードを設定して、TeraTermマクロが正常終了したのか否か、エラー原因が何なのか通知するとより便利になります。
終了コードの設定方法
TTLコマンドのsetexitcodeを使用すると、TeraTermマクロの終了コードを設定する事ができます。setexitcodeは次のように使用します。
setexitcode <終了コード>
TeraTermマクロで設定した終了コードを取得するためには、ttpmacro.exeを次のようにして実行します。
Windows NT/2000/XPの場合
ttpmacro test.ttl
Windows 98/MEの場合(/w オプションが必要)
start /w ttpmacro test.ttl
TeraTermマクロで設定した終了コードを取得するためには、変数errorlevelを参照します。エラーが発生した場合は終了コードを 1 、正常に終了した場合を0にするとした場合、次のように書くことができます。
ttpmacro test.ttl if %errorlevel% == 0 echo 正常終了 if %errorlevel% == 1 echo エラー発生
エラーの原因まで判るようにする
単に正常終了したのか否かだけでは、後から見たら原因が判らず不便です。そこで、エラーが発生した原因ごとに終了コードを決めておくと良いでしょう。たとえば次のように書くのはどうでしょうか。
EXIT_SUCCESS = 0 ; 正常終了
ERRCONNECT = 1 ; connectでエラー
ERRLOGOPEN = 2 ; logopenでエラー
ERRFILEOPEN = 3 ; fileopenでエラー
ERRTIMEOUT = 4 ; タイムアウトが発生
connect 'host'
testlink
if result != 2 then
setexitcode ERRCONNECT
end
endif
timeout = 10
wait 'login:' 'password:' 'router>'
if result == 0 then
setexitcode ERRTIMEOUT
end
endif
fileopen fhandle 'file.txt' 1
if result == -1 then
setexitcode ERRFILEOPEN
end
endif
logopen 'logfile.txt' 0 0
if result != 0 then
setexitcode ERRLOGOPEN
end
endif
setexitcode EXIT_SUCCESS
このTeraTermマクロを次のようにして実行します。
set macro=test.ttl set logfile=log.txt ttpmacro %macro% echo %macro% [%errorlevel%] >> %logfile%
ログファイルに実行したTeraTermマクロファイル名と終了コードを記録します。このようにすると、後でログファイルを見れば結果がひと目で判ります。もしもホスト名を引数にしてTeraTermマクロを実行しているのであれば、ホスト名をログファイルに記録した方が良いでしょう。この方法は大量のTeraTermマクロを一気に実行するとき、威力を発揮します。是非、活用してみてください。

コメント