TeraTermマクロ(TTL)を使って、作業ログを自動で特定のフォルダに保存するスクリプトを書いたことはありませんか?
「マクロ内でちゃんと保存先のパスやファイル名を指定しているのに、なぜか指定した場所にログファイルが吐き出されない……」
そんな時に真っ先に確認すべき原因と、一発で解決するためのマクロの書き方をご紹介します。
原因:TeraTerm本体の「ログ自動取得」と競合している
原因のほとんどは、TeraTerm(GUI本体)側の設定で「ログの自動取得」が有効になっていることです。
TeraTerm本体の設定で、接続時に自動でログを起動する設定になっていると、マクロが起動した時点ですでにTeraTermがログを掴んでしまっている状態になります。
この状態のままマクロ内で新しくログを開こうとしても、TeraTermは「もうログは取得中だよ」とマクロ側の命令を無視してしまうため、指定の場所にログが出力されなくなってしまいます。
解決策:マクロ内で一度ログを「閉じる」
これを解決するには、マクロの処理の最初で「本体が勝手に始めている自動ログ取得をいったん停止させ、改めてマクロ側の設定でログを開き直す」というアプローチをとります。
具体的には、ログを指定する前に以下のコマンドを挟みます。
修正コード例
; ① まず本体の自動ログ取得を閉じる
logclose
; ② 処理のバッティングを防ぐため、少し待つ(2秒)
pause 2
; ③ 改めてマクロ側で指定したログファイルを開く
logopen LOGNAME 0 0
各コマンドの解説
-
logclose現在開かれているログファイルを閉じます。これにより、本体の自動取得によって掴まれていたログが解放されます。 -
pause 2ログが完全に閉じる前に次の命令が進んでしまうとエラーになることがあるため、安全のために2秒ほどウェイト(待ち時間)を入れます。 -
logopen LOGNAME 0 0マクロ側で定義した変数(LOGNAMEなど)のファイル名・パスで、新しくクリーンな状態のログファイルを作成し、取得を開始します。
まとめ
-
TeraTerm本体の「ログ自動取得」が有効だと、マクロ側の
logopenが効かない。 -
回避するには、マクロの最初で
logclose➡️pause 2➡️logopenのコンボを使う。
マクロ単体で見れば間違っていないのに動かないという、盲点になりやすいトラブルです。もし「ログが指定場所に保存されないな?」と思ったら、この3行をスクリプトに組み込んでみてください!
