Tera Termマクロで終了コードを設定する方法
バッチファイルで大量のTeraTermマクロを処理したり、タスクで自動実行させる場合にエラーが発生したことを知るにはどうすればいいでしょうか?
そんな時は、エラーが発生した際に終了コードを設定してTeraTermマクロが正常終了したのか否か、エラー原因が何なのか通知するとより便利になります。
終了コードの設定方法
TTLコマンドのsetexitcodeを使用すると、TeraTermマクロの終了コードを設定する事ができます。setexitcodeは次のように使用します。
setexitcode <終了コード>
バッチファイルなどからTera Termマクロで設定した終了コードを取得するためには、変数errorlevelを参照します。
次のようなバッチファイルを作成し、テストマクロを呼び出してみましょう。
@echo off
"C:\Program Files (x86)\teraterm5\ttpmacro.exe" %HOMEPATH%\Desktop\test.ttl
if %errorlevel% == 0 echo 正常終了
if %errorlevel% == 1 echo エラー発生
pause
次にテストマクロを作成します。デスクトップに「test.ttl」というファイル名で保存しました。
setexitcode 0
バッチファイルを実行すると「正常終了」と表示されます。次にtest.ttlを次のように書き換えます。
setexitcode 1
再度バッチファイルを実行すると「エラー発生」と表示されることが確認できるはずです。
エラーの原因まで判るようにする
単に正常終了したのか否かだけでは、後から見たら原因が判定らず不便です。そこで、エラーが発生した原因ごとに終了コードを決めておくと良いでしょう。たとえば次のように書くのはどうでしょうか。
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マクロをmyconnect.ttlという名前で保存して次のようにバッチファイルから実行します。
set macro=%HOMEPATH%\Desktop\myconnect.ttl
set logfile=%HOMEPATH%\Desktop\log.txt
"C:\Program Files (x86)\teraterm5\ttpmacro.exe" %macro%
echo %macro% [%errorlevel%] >> %logfile%
ログファイルに実行したTeraTermマクロファイル名と終了コードを記録します。
このようにすると、後でログファイルを見れば結果がひと目で判ります。もしもホスト名を引数にしてTeraTermマクロを実行しているのであれば、ホスト名をログファイルに記録した方が良いでしょう。
この方法は大量のTeraTermマクロを一気に実行するとき、威力を発揮します。是非、活用してみてください。
この記事が気に入ったらサポートをしてみませんか?