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マクロを一気に実行するとき、威力を発揮します。是非、活用してみてください。