これからTera Termマクロを作成してみようという方のために、最低限これだけ覚えておけば何とかなる、というものをまとめてみました。
タップできる目次
Tera Termヘルプ
Tera Termをより深く使いたい方のために、Tera Termがインストールされたフォルダにteratermj.chmというヘルプファイルが用意されています。このファイルにはTera Termマクロの使い方やTTLコマンドの詳細も記載されているので、わからない事があったら読んでみてください。
過去のマニュアルを参照したい方は以下のリンクを辿ってください。
コメント
Tera Termマクロを書いていると、この処理はどういう事をしているのか書かないと後でわからなくなってしまいます。そこで、コメントを使うとTera Termマクロの動作に影響を与える事なくTera Termマクロ内にメモを残すことができます。
Tera Termマクロで使えるコメントは行の先頭に「;(セミコロン)」を付けます。コメントは行末まで有効で、先頭に;(セミコロン)を付けた行はコメントとみなされます。
また、C言語風に/* … */を使う事もできます。この方法は広い範囲をコメントアウトするには良い方法です。
メッセージボックスを表示する
画面にメッセージボックスを表示してユーザーに情報を伝えたり、デバッグ目的で変数の値を表示させたい場面は多々あります。メッセージボックスを使うためには、TTLコマンドの「messagebox」を使います。
messagebox <message> <title> [<special>]
messageには表示したいメッセージ、titleにはメッセージボックのタイトル部分に表示される文字列を指定します。specialはオプションで、指定しなくても構いません。このオプションは改行文字の扱いを制御するものです。
メッセージを改行させる方法
メッセージ部分に改行を入れたい場合は「\n」を使います。たとえばmessageに「こんにちは\nこんにちは」と指定します。
改行しない(デフォルト動作)
messagebox “こんにちは\nこんにちは” “こんにちは” 0
改行する
messagebox “こんにちは\nこんにちは” “こんにちは” 1
specialに0を指定すると
と表示されます。一方、specialに1を指定すると
このように改行されて表示されます。
システム変数と自由に使える変数
変数というのは、データを入れるための箱だと思ってください。変数には数値や文字列を入れることができます。文字列を入れる場合は「’(シングルクォート)」か「”(ダブルクォート)」でくくります。たとえば、1は数字の1ですが’1’とすると文字列の1として解釈されます。また、abcとすると変数のabcと解釈され、’abc’とすると文字列のabcと解釈されます。
;変数xに数字の1を入れる x = 1 ;変数xに文字列の1を入れる x = '1'
システム変数
Tera Termマクロにはシステム変数といってTera Termに最初から用意されている変数があります。変数を作成する際は、システム変数と被らないように気をつける必要あります。代表的なシステム変数をいくつか紹介します。
inputstr
受信内容やユーザーがinputboxなどで入力した内容が格納されます。
result
TTLコマンドのリターンコード(実行結果)が格納されます。resultを参照する事でTTLコマンドが成功したのか判定する事ができます。ただし、resultに実行結果を格納するTTLコマンドは一部に留まるので、詳しくはTera Termマニュアルを参照してください。
timeout
タイムアウトまでの秒数です。初期値は0となっていて、0の場合はタイムアウトが発生しません。waitのように受信結果を待つTTLコマンドで使用されます。
mtimeout
タイムアウトまでのミリ秒数です。waitのように受信結果を待つTTLコマンドで使用されます。
比較演算子
比較演算子とは「xとyは同じ」「xとyは違う」「xはyよりも大きい」「xはyよりも小さい」という風に比較するためのものです。
xとyが同じなのか違うのか比較するためには以下のように書きます。
;xとyは同じ x == y ;xとyは違う x != y
また、xがyよりも大きいのか、小さいのか比較するためには以下のように書きます。
;xはyよりも大きい x > y ;xはyよりも小さい x < y
条件分岐
条件分岐というのは「もしも〜だったら」という風に条件によって処理を変えるものです。TeraTermマクロではifを使用します。
if x == 1 then ;xが1の場合の処理 endif
もっと複雑に「もしも〜だったら、そうでなければ」とするにはelseを使います。
if x == 1 then ;xが1の場合の処理 else ;xが1でない場合の処理 endif
もっと複雑に「もしも〜だったら、そうでなく〜だったら、どちらも違ったら」とするにはelseifを使います。
if x == 1 then ;xが1の場合の処理 elseif x == 2 then ;xが2の場合の処理 else ;xが1でも2でもない場合の処理 endif
ループ処理
特定の処理を繰り返したい時はループ処理を使います。ループ処理を使う事によってコードがスッキリと見やすくなります。
同じ事をN回繰り返したい
ある処理を3回繰り返したい場合は次のように書きます。
for i 1 3 ;ここに処理を書く next
もしくは次のように書く事ができます。
i = 3 do while i > 0 ;iの値を1減らす i = i - 1 ;ここに処理を書く loop
ループ処理は用途によって色々な書き方があるので、詳しく知りたい方はTera Termヘルプを参照してください。
ディレクトリについて
常に絶対パスでファイル名を指定する場合は気にしなくても良いのですが、相対パスの場合は現在のディレクトリを意識してマクロを作成する必要があります。
fileopenやlogopenなど、ファイルを取り扱うTTLコマンドで相対パスを使う場合は次の記事を参照してください。
BGP4 経路選択 Tera Termマクロのchangedirとsetdirの違いさいごに
Tera Termマクロの良いところは、connectとwaitとsendtoだけでも実用的なマクロが作成できる点です。
最初から難しい処理を書く事は誰にも出来ません。まずは基本的な処理から始めて徐々に複雑な処理を書けるようになれば良いかと思います。
これからTera Termマクロを勉強する方、もしくは勉強を始めた方の参考になれば幸いです。