[2006-07-14]

Tera Termマクロ

Windowsでtelnetを行うのに代表的なツールがTeraTerm
このTeraTermには、TeraTermマクロという、スクリプト(?)言語が用意されている。
これによってTeraTermに対するコマンド入力などをマクロ化することが出来る。


マクロのヘルプ

メニューバーの「ヘルプ(H)」→「目次(I)」で「Tera Term Pro」のヘルプを開き、一番下の方にある「MACROヘルプ」をクリックする。
もしくは、TeraTerm.exeと同じディレクトリにあるmacroj.hlpを実行する。

TTL(Tera Term Language)というのがTeraTermマクロの言語。


マクロの実行方法

メニューバーの「コントロール(O)」→「マクロ(M)」でマクロのファイル(拡張子ttl)を選択するダイアログが開くので、そこからマクロファイルを選択すると実行される。

実行中は「MACRO - ファイル名」というダイアログが開く。
「一時停止(S)」ボタンと「終了(E)」ボタンがあり、一時停止すると「再開(S)」ボタンに替わる。
終了ボタンを押すと、実行中のマクロが終了する。

マクロはTeraTerm本体とは別プロセスで動いているようである。
タスクマネージャで見たとき、本体は「ttermpro.exe」、マクロは「ttpmacro.exe」)
何らかの要因でマクロの実行対象のTeraTerm本体が消えると、エラーが出ることがある。


マクロの

一定時間毎にリターンを押す(無限ループ)

一定時間毎にTeraTermに対して入力(リターンキーの押下)を行う。
このマクロは、例えば「(バックグラウンドで実行できなくて)一定時間入力が無いと終了してしまうようなプログラム」を実行し続けるのに役立つ。

eternal_enter.ttl:

;10秒間隔でEnter入力を永遠に行うマクロ
settitle '永遠ENTER'

while 1
  sendln
  pause 10
endwhile

このマクロは無限ループだが、終了ボタンを押せばちゃんと終了する。


マクロの文法

内容 ヘルプ
「;」(セミコロン)以降は、コメント   TTL→行の形式
「:」(コロン)から始まるとラベルgotocallで使用。 :label TTL→行の形式
コマンドは小文字でも大文字でもよい。 SENDLN
sendln …通常は小文字
 
コマンドの引数はスペース区切り。
数字は十進数か十六進数が使用可能。 65
$41
TTL→定数の形式
文字列はシングルクォーテーションかダブルクォーテーションでくくる。 'abc'
"abc"
TTL→定数の形式
「#」(シャープ)で始める数値は、それを文字コードとする文字に変換される。 #65  → 'A'
#$41 → 'A'
TTL→定数の形式
文字列定数は、隙間無く続けることで結合可能。 'AB''CD' →'ABCD'
#65#66   →'AB'
TTL→定数の形式
文字列の結合は、strconcatコマンドを使う。 str = 'AB'
strconcat str 'CD' →strが'ABCD'になる
strconcat
変数は宣言なしで代入可能。
(代入せずに使うとエラー)
i = 0
password = 'hoge'
TTL→行の形式
変数名の大文字小文字は区別されない。 Test = 'test1'
test = 'test2' …同じ変数なので、上書きされる
TTL→名前の形式
使える演算子は以下の通り。(比較演算子は、真のとき1。論理演算子はビット単位)
(〜) not * / % + - and or xor = <> < > <= >=
  TTL→式と演算子
文字列の比較はstrcompareコマンドを使う。   strcompare

制御コマンド

end

マクロの実行を終了する。BASICのENDに相当。
終了コードを返したい場合は、setexitcodeでセットしておく。

if 条件 then
 〜
elseif 条件 then
 〜〕
else
 〜〕
endif

if文。VBAのifに相当。
elseif・else部は無くてもよい。

if i=1 then
 sendln 'abc'
endif

for 変数 初期値 終了値
 〜
next

変数が初期値から1ずつ増加し、終了値を超えるまで繰り返す。BASICのFORに相当。

for i 1 10	;10回ループ
 send 'ABC'
next

while 条件
 〜
endwhile

条件が真の間ループする。VBAのwhileに相当。

goto ラベル

ラベルの行へ飛ぶ。MS-DOSのgotoに相当。

goto label:label
send 'abc'

call ラベル

ラベルの行(サブルーチン)を呼び出す。MS-DOSのcallに相当。
サブルーチンからはreturnによって終了する。

call subend

:sub
send 'abc'
return

return

callによって呼ばれたサブルーチンから元へ戻る。MS-DOSのexit/bに相当。

include 'ファイル名'

ファイル(TeraTermマクロ)を実行する。MS-DOSのcallに相当。
ファイル内からは、そのファイルの終わりに到達するか、exitによって終了する。

exit

includeによって呼ばれたマクロ実行を終了し、include元へ戻る。MS-DOSのexit/bに相当。

execcmnd 'コマンド'

TeraTermマクロのコマンドが書かれた文字列を、コマンドとして実行する。MS-DOSのcmd,コマンド実行に相当。

pause

指定された秒数だけ、実行を一時停止する。UNIXのsleepに相当。


通信コマンド

settitle 'タイトル'

TeraTerm本体のウィンドウのタイトル(キャプション)を変更する。MS-DOSのtitleに相当。
メニューバーの「設定(S)」→「ウィンドウ(W)」⇒「Tera Term: ウィンドウ設定」ダイアログの「タイトル(T)」で入力できるウィンドウのタイトルのこと。

これにより、複数のTeraTermを起動したときに区別をつけられるので便利。

send 〔値…〕

TeraTerm本体に値を送る。値はスペース区切りで複数指定可能。MS-DOSのechoに相当。

値は、文字列(シングルクォーテーションでくくる)の場合は文字列そのもの。
数字の場合は十進数の文字コードとして、その文字。(改行コードを送るならsendlnの方が便利)
アルファベットは変数として認識され、その内容(文字列なら文字列そのもの、数値なら文字コード)。

sendln 〔値…〕

TeraTerm本体に値を送り、最後に改行する。(つまり、コマンドを実行する。)
文字列を何も指定しないと、改行だけ行う。

値についてはsendと同様。

sendln "ls -l"

文字列操作コマンド

int2str 変数 数値

数値を文字列(十進数)に変換して変数に入れる。C言語のitoasprintfに相当。
数値には式(演算)を書くことも可能。

str2int 変数 文字列

文字列(十進数)を数値に変換して変数に入れる。C言語のatoiに相当。
システム変数resultに変換結果も入る(変換成功なら1、失敗なら0)。

strlen 文字列

文字列の長さを、システム変数resultに入れる。C言語のstrlenに相当。

strconcat 変数 文字列

変数に文字列を追加(結合)する。C言語のstrcatに相当。

strcompare 文字列1 文字列2

文字列1と文字列2の比較を行い、結果をシステム変数resultに入れる。C言語のstrcmpに相当。
(文字列1<文字列2なら-1、=なら0、>なら1)

strcopy 文字列 開始位置 長さ 変数

文字列の一部分を変数に入れる。BASICのMID$に相当。


その他コマンド

setexitcode

マクロの終了コードをセットする。MS-DOSからは%ERRORLEVEL%でその値を参照可能。
マクロを終了するのはend

getenv 文字列 変数

文字列で指定された環境変数の値を変数に入れる。C言語のgetenvに相当。


ツールのページへ行く / トップページへ行く