本サイトはプロモーションを含みます。

Tera Termマクロでファイルから1行ずつ読み込む方法

リモートホストで実行したいコマンドを1行に1つずつ記載したコマンドファイルを用意して、Tera Termマクロからそのファイルを1行ずつ読み込んで送信(実行)する手順を紹介します。

ファイルの開き方

まずはコードを見てください。

fileopen fh 'C:\Users\foo\Desktopcmd.txt' 0

ファイルを開くためのTTLコマンドはfileopenです。引数は3つあります。最初のfhはファイルハンドルというものです。ファイルハンドルというのは、このファイルの識別子です。

ファイルの操作(読んだり書いたり)をする場合はファイル名でなくファイルハンドルを使うとだけ覚えておけば大丈夫です。

次の’C:¥User¥foo¥Desktop¥cmd.txt’はファイル名です。最後の0はファイルポインタを意味します。ファイルポインタというのは簡単に言うとファイルを読み書きするファイルの位置です。今回はファイルを先頭から読むので0としています。逆にファイルの末尾にファイルポインタを指定したい場合は1とします。

ファイルの終わりまで1行ずつ読み込む

まずはコードを見てください。

:freadloop
filereadln fh buf
if result goto breakloop
    messagebox buf buf
goto freadloop

:breakloop

今までよりも少し複雑になりました。順を追って見ていきましょう。

最初の1行目「:freadloop」はラベルというものです。行の先頭に「:(コロン)」をつけるとラベルとして認識されます。ラベルはしおりの様なものだと覚えてください。

2行目でファイルから1行読みます。TTLコマンドはfilereadlnです。readは読む、lnはlineの略で1行を意味します。filereadlnにはファイルハンドルと読み込んだ内容を入れる変数を引数として渡します。ファイルハンドルは先ほどfileopenで指定したfhです。読み込んだ内容を入れる変数名はbufとしました。

3行目は「resultの内容が0でなければ 7行目のbreakloopへ飛ぶ」という意味です。もしもファイルの終わりまで来ると、resultという変数の内容が1にセットされます。resultはTeraTermマクロの予約後でTTLコマンドの実行結果などが入ります。予約後はTera Termが使用するので勝手に内容を書き換えてはいけません。gotoはラベルを引数にとり、指定したラベルへ飛ばすTTLコマンドです。ここでは7行目のbreakloopへ飛びます。

4行目は確認のためmessageboxで読み込んだ内容を表示しています。
5行目に達すると1行目のfreadloopへ飛び、また同じ事を繰り返します。

sshでログインしてコマンドを送信する

少し実用的に、sshでログインした後にコマンドを実行してみましょう。

connect '192.168.2.203 /ssh /auth=password /user=foo /passwd=********'
wait 'foo@astarte'

fileopen fh 'C:\Users\foo\Desktopcmd.txt' 0

:freadloop
filereadln fh buf
if result goto breakloop
    pause 1
    sendln buf
    wait 'foo@astarte'
goto freadloop

:breakloop

fileclose fh

9行目のpauseは指定した秒数だけTeraTermマクロの動作を止めるTTLコマンドです。今回はコマンドを実行するごとに1秒間止めています。

10行目ではsendlnでbufの内容を送信しています。bufにはファイルから読み込んだコマンドが入っています。

11行目はwaitで指定した文字列が受信できるまでTeraTermマクロの動作を止めています。このようにプロンプトが戻るまでTeraTermマクロの動作を止めないと勝手にどんどん処理が進んでしまい、正常にコマンドを送信する事ができなくなってしまうので、重要です。

そして、一番最後の行でファイルを閉じています。ファイルを閉じるTTLコマンドはfilecloseです。filecloseの引数にはファイルハンドルを渡します。