見出し画像

Tera Termマクロでよく使われるTTLコマンドTips

よく使うTTLコマンドや処理についてのTipsをまとめました。

Tera Termはバージョンに気をつけないと意図した通りにマクロが動かない場合があるので、もしも業務用途でマクロを作成する場合は注意してください。


接続関連のTTLコマンド

connect

このTTLコマンドは、TeraTermマクロとTeraTermをリンクするコマンドです。コマンドの結果はシステム変数resultへ格納されます。

connect 'host'

if result == 0 then
    ; TeraTermとリンクされていない
elseif result == 1 then
    ; ホストへ接続していないが、TeraTermとリンクしている
elseif result == 2 then
    ; ホストへ接続していて、TeraTermとリンクしている
endif

testlink

testlinkコマンドを実行することによりリンク状態を調べることができます。testlinkの結果はシステム変数resultへ格納されます。

testlink

if result == 0 then
    ; TeraTermとリンクされていない
elseif result == 1 then
    ; ホストへ接続していないが、TeraTermとリンクしている
elseif result == 2 then
    ; ホストへ接続していて、TeraTermとリンクしている
endif

ループ処理

無限ループ

無限ループは、do〜loopで実現できます。

do
    ; ここに処理を書く
loop

別の書き方では  "while 1" で実現できます。

while 1
    ; ここに処理を書く
endwhile

whileとuntilの違い

whileは条件を満たす間ループします。

while result == 0
    ; resultの値が0の間、ここの処理を実行する
endwhile

untileは条件を満たさない間ループします。

until result == 0
    ; resultの値が0でない間、ここの処理を実行する
enduntil

for文で指定回数ループする

10回処理を繰り返すには次のようにします。

for i 1 10
    ; iの値は1から10まで加算される
next

次のfor文も同様に10回処理を繰り返します。

for i 10 1
    ; iの値は10から1まで減算される
next

do〜loop

doで条件判定する場合と、loopで条件判定する場合とでは動作が異なります。 doで条件判定する場合はループ処理に入る前に条件判定をおこないます。

; 何か処理をする
; resultの値が更新される

do while result == 0
    ; resultの値を調べてからループに入る
    ; resultの値によっては1度もループ内の処理が実行されない
loop

loopで条件判定する場合はループ内の処理を実行後に条件判定します。必ず1度はループ内の処理が実行されます。

do
    ; 必ずループ内の処理が1度は実行される
loop while result == 0

break

途中でループから抜けるためにはbreakを使用します。breakを使うとbreakが書かれているループブロックの外側へ抜けます。 次のマクロを実行するとfor文から抜けますがdo〜loopから抜けることはできません。

do
    for i 1 10
        if i == 3 then
            break ; 途中で抜ける
        endif
    next
    ;;; for文のbreakで抜けると、ここへ来てdoloopを繰り返す
    ;;; doloopから抜けるためにはここでbreakを書く
loop

breakはTera Term 4.53以降でないと使えませんので注意してください。

continue

ループの先頭に戻るにはcontinueを使用します。continueが書かれているループブロックの先頭へ戻ります。

do
    do
        ;;; continueを実行すると、ここへ戻る
        if error == 1 then
            continue ; doの先頭へ戻る
        else
            ; 何か処理する
        endif
    loop
loop

continueはTera Term 4.77以降でないと使えませんので注意してください。

配列

文字列配列と数値配列を扱うことができます。配列を使う場合、事前に要素数を宣言する必要があります。

指定可能な要素数は1〜65536となっていて添字は0から始まります。 文字列配列を使うためにはstrarrayを使います。

strdim strarray 3 ; 3つの要素数を持つ文字列配列を宣言

strarray[0] = 'abc'
strarray[1] = 'def'
strarray[2] = 'ghi'
strarray[3] = 'jkl' ; これはエラー

数値配列を使うためにはintarrayを使います。

intdim intarray 3 ; 3つの要素数を持つ数値配列を宣言

intarray[0] = 123
intarray[1] = 456
intarray[2] = 789
intarray[3] = 123 ; これはエラー

文字列処理

sprintfとsprintf2

2つのTTLコマンドの違いは次のとおりです。

  • sprintf - 結果がシステム変数inputstrに格納される

  • sprintf2 - 結果が指定された変数に格納される

age = 10
name = '太郎'

; システム変数inputstrに「太郎の年齢は10歳です」が格納される
sprintf '%sの年齢は%d歳です' name age

; 変数valに「太郎の年齢は10歳です」が格納される
sprintf2 val '%sの年齢は%d歳です' name age

フォーマットは文字列ならば「%s」、数値ならば「%d」となります。通常はこの2つのみ知っていれば問題ありません。もっと知りたければTeraTermヘルプを参照してください。

strconcat

2つの文字列変数を連結するためにはstrconcatを使用します。次のTTLコマンドは変数xxxに変数yyyの内容を連結します。

xxx = 'abc'
yyy = 'def'

; xxxの内容が「abc」から「abcdef」に変わる
strconcat xxx yyy

このTTLコマンドをフルパスのファイル名作成に使用することはおすすめしません。フルパスのファイル名を作成する場合はmakepathを使ってください。

makepath

このTTLコマンドはディレクトリ名とファイル名からフルパスのファイル名を作成します。必要であれば「¥」を自動的に挿入してくれます。

dirname = 'C:¥Users¥taro'
filename = 'test.txt'

; 変数fullpathに「C:¥Users¥taro¥test.txt」が格納される
makepath fullpath dirname filename

その他のコマンド

yesnobox

ユーザーに判断を委ねる場合はyesnoboxを使用します。

yesnobox 'ここに質問内容を書く' 'ここにタイトルを書く'

if result == 0 then
    ; 「いいえ」ボタンが押された場合の処理
elseif == 1 then
    ; 「はい」ボタンが押された場合の処理
endif

結果はシステム変数resultに格納されます。

  • 0 - 「いいえ」ボタンが押された

  • 1 - 「はい」ボタンが押された

inputbox

ユーザーに文字列入力を促す場合はinputboxを使用します。

inputbox 'ここに入力を促すメッセージを書く' 'タイトル' '初期値があればここに書く(無くても良い)'

入力した内容はシステム変数inputstrへ格納されます。

filenamebox

ユーザーにファイル名を選択させる場合はfilenameboxを使用します。

filenamebox 'タイトル' ダイアログボックスの種類(オプション) 初期ディレクトリ(オプション)

ダイアログボックスの種類の種類は2通りあります。指定しない場合は0となります。

  • 0 - 「ファイルを開く」ダイアログボックス

  • 0以外 - 「ファイル名を付けて保存」ダイアログボックス

初期ディレクトリを指定したい場合はディレクトリを指定します。初期ディレクトリを指定しない場合は空にします。その場合はWindowsによって初期ディレクトリが自動的に決定されます。 

この記事が気に入ったらサポートをしてみませんか?