ここでは、ファイルからコマンドリストを読み込んで、コマンドを実行する
マクロを紹介します。

いちいち、TeraTermマクロの中に、コマンドを直接書き込みやり方だと、後で
修正がめんどくさいですし、何より汎用性がないですよね。

そこで、今回は、ローカルPCにコマンドのリストを作って、それを読み込んで、
まとめてTeraTerm上でコマンドを実行させる方法を紹介します。

まず、下記のようにローカルにコマンドのリストを作成します。

注意点としては、必ず最下行は改行をしないことです。改行をさせてしまうと、
改行をさせた行まで読み込み処理に使われてしまいますので、ご注意を!

今回使うファイル読み込みをさせるために使うサンプルは下記です。

;接続先ホスト
HOSTADDR = '192.168.10.6' 

;ユーザ名
USERNAME = 'test'

;パスワード設定
PASSWORD = 'testpass' 

;接続コマンド作成
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user=' 
strconcat COMMAND USERNAME 
strconcat COMMAND ' /passwd=' 
strconcat COMMAND PASSWORD
 
;接続 
connect COMMAND

;リストから読み込む
fileopen cmdlist 'C:\Users\User\Desktop\malutilogin\list.txt' 0

;ループ開始
:loopstart

filereadln cmdlist buf

;ファイルから行を読み込めなかった場合
if result<>0 then
    goto loopend
;ファイルから行を読み込めた場合
else
    wait '$'
    sendln buf
    goto loopstart
endif

;ループ終了
:loopend

fileclose cmdlist

;マクロ終了
end

少し複雑ですね 笑
でも、そんなに難しくはないので頑張って理解して下さい。

スポンサーリンク


実行させると下記のようにリストに入力した「hostname」と「uname -a」をそれぞれ
実行したTeraTermの結果を入手することができました。

解説をしますと、まずポイントとなるのが下記の文ですね。

fileopen cmdlist ‘C:\Users\User\Desktop\malutilogin\list.txt’ 0

「fileopen」がファイルを開くためのTTLコマンドになります。
引数としては下記になります。

「cmdlist」は、「ファイルバンドル」と言って、ファイル操作を行う際に必要となるマクロ内のファイルを示す記号くらいの認識で大丈夫です。

「C:\Users\User\Desktop\malutilogin\list.txt」は読み込むコマンドリストのフルパスになります。

「0」はファイルポインタと言って、とりあえず「0」を指定すれば先頭から
読み込むことができるという認識で大丈夫です。

「filereadln」にて、ファイルである「cmdlist」を一行読み込んで、変数「buf」に格納します。

「filereadln」を実行した後は、resultという値に格納されて
正常にファイル読み込みができれば「0」、もうそれ以上ファイル読み込みができなければ
「0以外」が返るので、それぞれ分岐させています。

また、「:loopstart」、「:loopend」はラベルと言って、「goto loopstart」や「goto loopend」を実行した際に、そのラベルの位置まで処理を戻すことができます。

なので、ファイル読み込みに成功した場合は、「filereadln」で次の行を読み込む、
もう読み込む文章がなかった場合は、処理を終了させるという意味になります。

少し、複雑だったかもしれませんが、ファイル読み込みの処理はどのプログラミング言語でも
大体同じような流れですので、一度覚えてしまえば、汎用性がある処理なので頑張って理解しましょう!

スポンサーリンク