見出し画像

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

この記事が気に入ったらサポートをしてみませんか?