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→行の形式 | |
「:」(コロン)から始まるとラベル。gotoやcallで使用。 | :label |
TTL→行の形式 |
コマンドは小文字でも大文字でもよい。 | SENDLN |
|
コマンドの引数はスペース区切り。 | ||
数字は十進数か十六進数が使用可能。 | 65 |
TTL→定数の形式 |
文字列はシングルクォーテーションかダブルクォーテーションでくくる。 | 'abc' |
TTL→定数の形式 |
「#」(シャープ)で始める数値は、それを文字コードとする文字に変換される。 | #65 → 'A' |
TTL→定数の形式 |
文字列定数は、隙間無く続けることで結合可能。 | 'AB''CD' →'ABCD' |
TTL→定数の形式 |
文字列の結合は、strconcatコマンドを使う。 | str = 'AB' |
strconcat |
変数は宣言なしで代入可能。 (代入せずに使うとエラー) |
i = 0 |
TTL→行の形式 |
変数名の大文字小文字は区別されない。 | Test = 'test1' |
TTL→名前の形式 |
使える演算子は以下の通り。(比較演算子は、真のとき1。論理演算子はビット単位)(〜) not * / % + - and or xor = <> < > <= >= |
TTL→式と演算子 | |
文字列の比較はstrcompareコマンドを使う。 | strcompare |
マクロの実行を終了する。BASICのENDに相当。
終了コードを返したい場合は、setexitcodeでセットしておく。
if文。VBAのifに相当。
elseif・else部は無くてもよい。
if i=1 then sendln 'abc' endif
変数が初期値から1ずつ増加し、終了値を超えるまで繰り返す。BASICのFORに相当。
for i 1 10 ;10回ループ send 'ABC' next
条件が真の間ループする。VBAのwhileに相当。
ラベルの行へ飛ぶ。MS-DOSのgotoに相当。
goto label 〜 :label send 'abc'
ラベルの行(サブルーチン)を呼び出す。MS-DOSのcallに相当。
サブルーチンからはreturnによって終了する。
call sub 〜 end :sub send 'abc' return
callによって呼ばれたサブルーチンから元へ戻る。MS-DOSのexit/bに相当。
ファイル(TeraTermマクロ)を実行する。MS-DOSのcallに相当。
ファイル内からは、そのファイルの終わりに到達するか、exitによって終了する。
includeによって呼ばれたマクロ実行を終了し、include元へ戻る。MS-DOSのexit/bに相当。
TeraTermマクロのコマンドが書かれた文字列を、コマンドとして実行する。MS-DOSのcmd,コマンド実行に相当。
指定された秒数だけ、実行を一時停止する。UNIXのsleepに相当。
TeraTerm本体のウィンドウのタイトル(キャプション)を変更する。MS-DOSのtitleに相当。
メニューバーの「設定(S)」→「ウィンドウ(W)」⇒「Tera Term: ウィンドウ設定」ダイアログの「タイトル(T)」で入力できるウィンドウのタイトルのこと。
これにより、複数のTeraTermを起動したときに区別をつけられるので便利。
TeraTerm本体に値を送る。値はスペース区切りで複数指定可能。MS-DOSのechoに相当。
値は、文字列(シングルクォーテーションでくくる)の場合は文字列そのもの。
数字の場合は十進数の文字コードとして、その文字。(改行コードを送るならsendlnの方が便利)
アルファベットは変数として認識され、その内容(文字列なら文字列そのもの、数値なら文字コード)。
TeraTerm本体に値を送り、最後に改行する。(つまり、コマンドを実行する。)
文字列を何も指定しないと、改行だけ行う。
値についてはsendと同様。
sendln "ls -l"
数値を文字列(十進数)に変換して変数に入れる。C言語のitoaやsprintfに相当。
数値には式(演算)を書くことも可能。
文字列(十進数)を数値に変換して変数に入れる。C言語のatoiに相当。
システム変数resultに変換結果も入る(変換成功なら1、失敗なら0)。
文字列の長さを、システム変数resultに入れる。C言語のstrlenに相当。
変数に文字列を追加(結合)する。C言語のstrcatに相当。
文字列1と文字列2の比較を行い、結果をシステム変数resultに入れる。C言語のstrcmpに相当。
(文字列1<文字列2なら-1、=なら0、>なら1)
文字列の一部分を変数に入れる。BASICのMID$に相当。
マクロの終了コードをセットする。MS-DOSからは%ERRORLEVEL%でその値を参照可能。
マクロを終了するのはend。
文字列で指定された環境変数の値を変数に入れる。C言語のgetenvに相当。