TeraTermProのマクロでよく忘れることメモ
最近NW機器の一括キッティングでTeraTermProのマクロを書くことが多かったのですが、数ヶ月おきにしか触らないため、毎回忘れて困ることがあります。
今後も時々使うことになるので、メモっておきます。
プロンプトを待つ
ログイン処理や、コマンド実行完了の判定に使えます。
単純にログインするだけ
wait 'Login:' sendln 'admin' wait 'Password:' sendln 'abcdefg'
ホスト名等が変わる場合
Router_osaka_1>
みたいなプロンプトを待つ場合。
waitと違ってwaitregexは正規表現が使えます。
waitregex 'Router.*>'
マクロへの値の渡し方
ttpmacro.exe
の実行時にコマンドラインオプションを付けると、マクロ中で変数として受け取れます。
- param1 : マクロファイル名
- param2 : 2つめのオプション
- param3 : 3つめのオプション
- param4~9 : (略)
- paramcnt : 値の個数
> ttpmacro.exe test.ttl 192.168.0.1 23
param1 -> 'test.ttl' param2 -> '192.168.0.1' param3 -> '23' paramcnt -> 3
paramcnt
の数で分岐させることで、引数が無い場合にも対応できます。
マクロにIPアドレスを渡す
DEFAULT_IP = '192.168.0.11' if paramcnt > 1 then IPADDRESS = param2 else IPADDRESS = DEFAULT_IP endif
IPアドレスを渡さなかった場合はデフォルト値を使います。
TeraTerm呼び出し時のコマンドラインオプション
connect
の引数に渡した文字列は、TeraTerm本体へのコマンドラインオプションになります。
参照: Tera Term Pro コマンドライン
TeraTerm本体に渡すオプションを作る
COM_PORT = '5' BAUDRATE = '9600' COMMAND = '/C=' strconcat COMMAND COM_PORT strconcat COMMAND ' /BAUD=' strconcat COMMAND BAUDRATE connect COMMAND
strconcat
で1個ずつ繋げるのが面倒。
文字列配列
文字列配列の初期値は空文字列なので、.+
と比較してやれば空かどうか判断できます。
strdim ARRAY 5 ARRAY[0] = 'A' ARRAY[1] = 'B' ARRAY[2] = 'C' ARRAY[3] = 'D' ;ARRAY[4] = for i 0 4 strmatch ARRAY[i] '.+' if result = 0 then break endif sendln ARRAY[i] next
->A ->B ->C ->D
waitで分岐
waitに複数の引数を渡すと、何番目の文字列を受け取ったのか教えてくれます。
wait 'A' 'B' if result = 1 then messagebox 'A' '結果' else messagebox 'B' '結果' endif
その他
ほぼ毎回書くこと。
ログの取得
; ログ取得 LOG_FILE = 'C:\Temp\teraterm.log' logopen LOG_FILE 0 0 ; ログ閉じる logclose
ログは不要っぽくてもとりあえず取る。
; ログファイル名をクリップボードにコピー
var2clipb LOG_FILE
戻り値の返し方が分かってないので、クリップボード経由で。 いつもVBAからTeraTermを呼んで使っているので、結果としてのログをVBA側で拾えるように。
; シリアル切断・ポート解放 disconnect ; TeraTerm終了 ; /Vオプションを付けている場合は不要 closett
後始末。