TeraTerm マクロの作り方

ttl ファイルを保存する方法

さて、マクロ自体の基本的な使い方*1を書いたので、今度は作り方を書く前に、保存の方法を。
TeraTerm マクロは、テキストエディタで編集するテキストファイル。
ファイル保存時に .txt ではなく *.* を選択して、最後に .ttl を追記するだけ。
要は、拡張子が .ttl なだけ。
実行させたいコマンドを、実行させたい順番で、実行させたいタイミングで記述する。
さすがに Windows の使い方から分からない…という人が、TeraTerm を使うとは思えないので、詳細な保存方法は割愛しちゃう。


これを、メニューからとか、起動時とか、TeraTerm に読み込ませれば実行される。

テキストエディタ

では、作り方。
作りたいと思うからには、なにか欲しい機能があるはず。
それらを推しはかれる訳もないので、今回はありがちなサンプルとしてログの自動的取得でも。
TeraTerm に限らず、ログを取るときは 開く という。
これは、ファイルを開いて文字列を入れ込む…というイメージを持つと理解しやすいはず。


最初は Windows 付属のメモ帳で十分だと思う。


sendln 'echo hello world'


これだけを書いててきとーな名前で保存し、ログイン済みの TeraTerm ウィンドウでマクロとして実行してみると理解しやすいと思う。

参考となる資料

それから、TeraTerm のヘルプファイルは開いておこう。
デフォルトインストールなら、C:\Program Files\teraterm\teratermj.chm があるはず。
こんなページより、よほど親切な記述方法で MACRO ヘルプが記載されてたりする。
TeraTerm から開くなら、メニューの「ヘルプ(H)」から「目次(I)」を選択する。
でも、TeraTerm を閉じると一緒にヘルプも閉じちゃうので、マクロ作成だけが目的なら、直接ヘルプファイルを起動しておいたほうがいいよね。


ヘルプファイルでよく使うのは、TTL コマンドリファレンスだろう。
どんな命令文があるのか把握しておけば、マクロを組むのなんて積み木を積んでいくのと、そう変わらない。


これを全部覚える必要はないけど、一度は目を通しておく。
似たような機能*2もあるけど、微妙に役割が違うので注意。
ここを説明しだすと、長いんよ。

通信コマンド 備考
bplusrecv B-Plus プロトコルでファイルを受信する。
bplussend B-Plus プロトコルでファイルを送信する。
callmenu 4.56以降 - ウインドウのメニューを実行する。
changedir Tera Term の現在のディレクトリを変更する。
clearscreen ウインドウの画面を消去する。
closett Tera Term を終了させる。
connect 接続する。
cygconnect 4.57以降 - Cygwinへ接続する。
disconnect Tera Term とホストの間の通信を終了させる。
dispstr 4.67以降 - 文字を端末画面に出力する。
enablekeyb Tera Term のキーボード入力を許可/禁止する。
flushrecv MACRO の受信バッファーの内容を消す。
gethostname 4.61以降 - 接続先のホスト名(IPアドレス)を得る。
gettitle ウインドウタイトル文字列を得る。
kmtfinish Kermit Finish コマンドを実行する。
kmtget ファイルを Kermit Get コマンドで受信する。
kmtrecv Kermit プロトコルでファイルを受信する。
kmtsend ファイルをKermit プロトコルで送信する。
loadkeymap キーボード設定ファイルを読み込む。
logclose Tera Term のログを終了する。
loginfo 4.73以降 - Tera Term のログ取得状態を得る
logopen Tera Term のログを開始する。
logpause Tera Term のログを一時中断する。
logstart 中断していた Tera Term のログを再開する。
logwrite 文字列をログに書き込む。>文字列をログに書き込む。
quickvanrecv Quick-VAN プロトコルでファイルを受信する。
quickvansend Quick-VAN プロトコルでファイルを送信する。
recvln 一行分の文字を受信する。
restoresetup 設定ファイルを読み込む。
scprecv 4.57以降 - SCPプロトコルでファイルを受信する。
scpsend 4.57以降 - SCPプロトコルでファイルを送信する。
send データを送信する。
sendbreak ブレーク信号をホストへ送出する。
sendbroadcast 4.62以降 - データをブロードキャスト送信する。
sendfile ファイルを送信する。
sendkcode キーコードを送信する。
sendln データと改行を送信する。
sendlnbroadcast 4.62以降 - データをブロードキャスト送信する。
sendmulticast 4.62以降 - データをマルチキャスト送信する。
setbaud 4.58以降 - シリアルポートのボーレートを変更する。
setdebug 4.64以降 - デバッグモードを設定する。
setdtr 4.59以降 - Tera Term で DTR の状態を変更する。
setecho Tera Term のローカルエコー (local echo) の状態を変更する。
setmulticastname 4.62以降 - マルチキャスト送信のための端末識別名を設定する。
setrts 4.59以降 - Tera Term で RTS の状態を変更する。
setsync 同期モードを設定する。
settitle ウインドウタイトル文字列を変更する。
showtt Tera Term ウインドウの表示状態を変更する。
testlink 現在のリンクおよび接続の状態を報告する。
unlink 現在の Tera Term ウインドウと MACRO の間のリンクを断つ。
wait 文字列を待つ。
wait4all 4.63以降 - マクロに接続されている全端末の文字列を待つ。
waitevent イベントを待つ。
waitln 文字列を含む行を待つ。
waitn 4.62以降 - 指定されたバイト数の受信を待つ。
waitrecv 文字列を待つ。
waitregex 4.21以降 - 正規表現文字列を含む行を待つ。
xmodemrecv XMODEM プロトコルでファイルを受信する。
xmodemsend XMODEM プロトコルでファイルを送信する。
ymodemrecv 4.66以降 - YMODEM プロトコルでファイルを受信する。
ymodemsend 4.66以降 - YMODEM プロトコルでファイルを送信する。
zmodemrecv ZMODEM プロトコルでファイルを受信する。
zmodemsend ZMODEM プロトコルでファイルを送信する。
制御コマンド 依存するバージョン
break 4.53以降 - ループから抜ける。
call サブルーチンをコールする。
do,loop 4.56以降 - 繰り返す。
end マクロの実行そのものを終了する。
execcmnd TTL コマンド を実行する。
exit メインファイルへ戻る。
for,next 繰り返す。
goto ラベルへジャンプする。
if,then,elseif,else,endif 条件分岐
include インクルードファイルに移る。
mpause 4.27以降 - 休止する。
pause 休止する。
return サブルーチンを抜け、メインルーチンへ戻る。
until,enduntil 4.56以降 - 繰り返す。
while,endwhile 繰り返す。
文字列操作コマンド 依存するバージョン
code2str ASCII コード値を文字列に変換する。
expandenv 4.71以降 - 環境変数文字列を展開する。
int2str 整数値を文字列に変換する。
sprintf 4.52以降 - フォーマットされた出力を返す。
sprintf2 4.62以降 - フォーマットされた出力を返す。
str2code 文字列を ASCII コード値に変換する。
str2int 文字列を整数値に変換する。
strcompare 文字列を比較する。
strconcat 文字列を継ぎ足す。
strcopy 文字列をコピーする。
strinsert 4.67以降 - 文字列を挿入する。
strjoin 4.67以降 - 文字を連結する。
strlen 文字列の長さを返す。
strmatch 4.59以降 - 正規表現によるパターンマッチングを行う。
strremove 4.67以降 - 文字列を削除する。
strreplace 4.67以降 - 文字列を置換する。
strscan 部分文字列の位置を返す。
strspecial 4.67以降 - 特殊文字を変換する。
strsplit 4.67以降 - 文字列を分割する。
strtrim 4.67以降 - 前後の文字を削除する。
tolower 4.53以降 - 文字列をすべて小文字に変換する。
toupper 4.53以降 - 文字列をすべて大文字に変換する。
ファイル操作コマンド 依存するバージョン
basename 4.69以降 - パス名からファイル名を得る。
dirname 4.69以降 - パス名からディレクトリ名を得る。
fileclose ファイルハンドルを閉じる。
fileconcat ファイルの内容を別のファイルに追加する。
filecopy ファイルをコピーする。
filecreate ファイルを作成する。
filedelete ファイルを削除する。
filelock 4.74以降 - 開いているファイルをロックする。
filemarkptr ファイルポインタを保存する。
fileopen ファイルを開く。
filereadln ファイルから一行読む。
fileread 4.48以降 - ファイルを読む。
filerename ファイル名を変更する。
filesearch ファイルまたはフォルダがあるか確かめる。
fileseek ファイルポインタを移動する。
fileseekback "filemarkptr" コマンドで保存した位置にファイルポインタを移動する。
filestat 4.66以降 - ファイルの統計情報を取得する。
filestrseek 文字列をファイルの先頭から末尾に向かって検索する。
filestrseek2 文字列をファイルの末尾から先頭へ向かって検索する。
filetruncate 4.67以降 - ファイルのサイズを変更する。
fileunlock 4.74以降 - 開いているファイルのロックを解除する。
filewrite ファイルに文字列を書き込む。
filewriteln ファイルに文字列を改行付きで書き込む。
findfirst,findnext,findclose 文字列に合致する最初のファイルを探す。
foldercreate 4.69以降 - フォルダを作成する。
folderdelete 4.69以降 - フォルダを削除する。
foldersearch 4.69以降 - フォルダがあるか確かめる。
getdir MACRO の現在のディレクトリを得る。
getfileattr 4.69以降 - ファイルまたはディレクトリの属性を得る。
makepath フルパス名を作成する。
setdir MACRO の現在のディレクトリを変更する。
setfileattr 4.69以降 - ファイルまたはディレクトリの属性を変更する。
パスワードコマンド 依存するバージョン
delpassword パスワードを削除する。
getpassword パスワードを読み出す。
passwordbox パスワードを入力するためのダイアログボックスを開く。
その他のコマンド 依存するバージョン
beep ビープ音を鳴らす。
closesbox statusbox コマンドによって開かれたステータスダイアログボックスを閉じる。
clipb2var 4.46以降 - クリップボードのテキストデータをコピーする。
crc32 4.60以降 - CRC-32を計算する。
crc32file 4.60以降 - CRC-32を計算する。
exec アプリケーションを起動する。
filenamebox 4.54以降 - ファイル名を選択するダイアログボックスを開く。
getdate 現在の日付を得る。
getenv 環境変数を得る。
getspecialfolder 4.72以降 - 特殊フォルダのパスを取得する。
gettime 現在の時刻を得る。
getttdir 4.60以降 - ttpmacro.exe があるディレクトリを得る。
getver 4.58以降 - Tera Termのバージョンを取得する。
ifdefined 4.46以降 - 型を調べる。
inputbox 文字列を入力するためのダイアログボックスを開く。
intdim 4.72以降 - 整数配列型の変数を宣言する。
messagebox ダイアログボックスを開き、ユーザーにメッセージを知らせる。
random 4.27以降 - 乱数を生成する。
rotateleft 4.54以降 - 左にローテート(循環シフト)する。
rotateright 4.54以降 - 右にローテート(循環シフト)する。
setdate システムの日付を変更する。
setdlgpos ダイアログボックスの位置を設定する。
setenv 4.54以降 - MACRO の終了コードを設定する。
setexitcode 環境変数を変更する。
settime システムの時刻を変更する。
show MACRO ダイアログの表示状態を変更する。
statusbox ステータスダイアログボックスを表示する。
strdim 4.72以降 - 文字列配列型の変数を宣言する。
var2clipb 4.46以降 - テキストデータをクリップボードにコピーする。
yesnobox ダイアログボックスを開き、ユーザーに「はい」/「いいえ」を選択させる。

手元にインストールしてた Ver 4.74 で実装されているコマンドは、こんな感じ。
つか、増えてら… 知らないコマンドがある…。


とりあえず、簡単なマクロから。
TeraTerm で、コマンドを実行させたいとき。
上記のコマンド群をみると、sendln を使えばいいことが分かる*3


なので、テキストファイルに、こう書く。


sendln 'echo hello world!'


これを書いて、保存したら適当なサーバでマクロを読み込んでみる。
TeraTerm 上で、コマンドが実行されているはず。


次に、ログファイルを自動で開いてくれるマクロにする。
上記コマンドを読むに、logopen を使えばヨサゲだとわかる。


ここは横着して、TeraTerm ヘルプから引用しちゃう。

; 日時を取得
gettime timestr "%Y%m%d-%H%M%S"

; ログファイル名に日時とユーザ名を入れる。
sprintf2 filename 'autolog-%s.log' timestr

logopen filename 0 0

これで、TeraTerm がインストールされているフォルダに、自動でログが開く。
この場合、TeraTerm を閉じれば、ログも閉じる。


そのまま実行したら c:\autolog-YYYYMMDD-hhmmss.log ができているはず。
できていなかったら、エラー処理を組んで原因調査…になるんだけど、そこは割愛。


注意点としては、サーバに接続されている状態じゃないとログを開けないことかな。


ttl ファイルを開く方法

そのままダブルクリックで開くと、TeraTerm に関連付けされているので編集できない。
テキストエディタから該当ファイルを開くか、ドラッグ&ドロップするか、コンテキストメニューを出してエディタに送るか…
何回も書くけど、テキストファイルなのでテキストエディタを使えば良い。

*1:書きこんで、マクロとして実行する方法

*2:for とか while とか until とか

*3:似たコマンドで send があるけど、改行を含まないのでコマンドとしては実行されない…