1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TeraTermマクロの基本文法(勉強メモ)

Last updated at Posted at 2025-10-14

一部のAIに聞いても正しい答えを教えてもらえず、ちょっと勉強したので、メモとして残します。

マクロ実行方法

  1. (マクロ作成)Windowsのメモ帳などで、sample_macro.ttlのようなファイルを作成します。
  2. 「プログラムで開く」で「PCでアプリを選択」を押し、
    image.png
  3. TeraTermのインストールディレクトリを参照し、ttpmacro.exeを実行します
    image.png

各種文法

変数

変数の利用/メッセージ表示/コメント

変数は宣言・初期化せずそのまま使えます。
;以降はコメントとして扱われます。

disp_msg = 'Hello World!' ; 予約語もありそうなので、具体的な変数名にする良さそう

メッセージボックスはmessagebox [message] [title]のようにすると表示できます。

disp_msg = 'Hello World!' ; 予約語もありそうなので、具体的な変数名にする良さそう
messagebox disp_msg 'メッセージ表示の例'

実行結果です。なお、裏の「Pause」「End」というボックスを押すと、マクロの実行を一時停止/終了することができます。
image.png

文字列結合/改行

文字列結合はstrconcat [1つめの変数] [2つめ]という形で行われます。
結果は、[1つめの変数]に格納されます。
#13を結合すると、改行できます。

disp_msg = 'Hello World!' 
strconcat disp_msg 'こんにちは世界'
strconcat disp_msg #13 ; 改行
strconcat disp_msg #13
strconcat disp_msg '[message end]'

messagebox disp_msg 'メッセージ表示の例'

image.png

リモートサーバの操作

リモートサーバへのSSHログイン

connectコマンドで、host(ip)/username/passwordを指定すると接続できます。
なお、SSHでサーバに初回接続する時は、known_hostsに無い旨のセキュリティ警告が表示されます(基本的に何も考えずYESしてよいです)

; ログイン
linux_server = '[IP_ADDR]:22 /ssh /auth=password /user=[USERNAME] /passwd=[PASSWORD]'
connect linux_server

image.png

結果待ちとコマンド投入

Teratermマクロでリモートサーバを操作するときは、「入力可能状態になったか」を判定してからコマンドを投入することが多いです。
wait [str]コマンドを使うと、[str]の内容が画面上に表示されたかを確認するコマンドです。
このコマンドで特定の文字列を待つことで、入力可能になったかを判定します。

ログインに成功していれば、Teraterm画面上にqiita@v133-18-160-82-vir:~$などと出るので、wait '$'とすることで「入力可能になったら次のコマンドに進む」という操作が可能です。
「サーバ・ユーザ・ディレクトリ含めて、厳密に動作を確認したい」などであれば、wait 'qiita@v133-18-160-82-vir:~$'のように、厳密にwaitしても良いかなと思います。

Teratermマクロでコマンドを打つときは、sendln [str]で文字を送ることができます。

; ログイン
linux_server = '[IP_ADDR]:22 /ssh /auth=password /user=[USERNAME] /passwd=[PASSWORD]'
connect linux_server

; 入力可能になるのを待つ
wait '$'
cmd = 'pwd'
sendln cmd ; コマンド送信

image.png

ユーザ入力画面

1行入力

ユーザに文字列を打ってもらい、それをマクロ動作に反映させたい、というケースがあると思います。
そのような場合はinputbox [message] [title]を使います。結果はinputstrという変数に格納されます。

disp_msg = 'Hello, '
; ユーザに入れてもらう
inputbox 'ユーザ名を入力してください' 'ユーザ名確認'
strconcat disp_msg inputstr

messagebox disp_msg '入力結果'

image.png
image.png

YesNoボックス/if

ユーザに「これでよろしいですか?はい/いいえ」と確認したいケースがあると思います。
その場合はyesnoboxを使います。「はい」を押すとresult変数に数値1が入ります。

resultの内容はif ~ then ~ elseif ~ then ~ endif文などで判定できます。

disp_msg = 'ユーザ名は以下でよろしいですか?:'
; ユーザに入れてもらう
inputbox 'ユーザ名を入力してください' 'ユーザ名確認'
strconcat disp_msg inputstr

yesnobox disp_msg 'はい・いいえ'

if result==1 then
  messagebox '確認ありがとうございます' 'メッセージ'
endif

image.png
↓「Yes」を押すと
image.png

if/for

if/文字列比較

文字列比較をする場合、strcompare [文字1] [文字2]とします。
一緒の場合、result変数に数値0が入ります。後段のif文で扱いたい場合などはresultを参照します。

; ユーザに入れてもらう。入力内容はinputstr
inputbox 'ユーザ名を入力してください' 'ユーザ名確認'

; 比較
strcompare '村上' inputstr
if result==0 then
  messagebox '村上さんですね' 'メッセージ'
elseif result==1 then
  messagebox 'よくわかりません' 'メッセージ'
endif

image.png

for/配列

配列を使うときは、strdim [変数名] [長さ]のように名前と長さを定義します。
forfor i 0 4 ~ nextというように使います。なお、0始まりにしたほうが安全です。

strdim lineup 5 ; 配列を宣言

for i 0 4 
  int2str i_str i ; Int型のiをStr型にしてi_strに格納
  strconcat i_str 'つ目を入力してね'
  inputbox i_str '入力欄'
  lineup[i]=inputstr ; 配列に格納
next

disp_mes = ''
for i 0 4
  strconcat disp_mes lineup[i]
  strconcat disp_mes #13
next

messagebox disp_mes '入力確認'

image.png

関数(サブルーチン)

関数(サブルーチン)

関数は:login_serv ~ returnと宣言し、call login_servのように呼びます。
引数の概念はなく、すべてがグローバル変数のように処理されます。

また、関数を使う場合は、本体部分にendを明確に書く必要があります。

inputbox 'ユーザ名を教えてね' '確認'
username = inputstr

; 関数の呼び方
call login_serv

; ログインできたあとの処理
wait '$'
cmd = 'pwd'
sendln cmd

end ; main部分にendが必要

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 関数の定義
:login_serv
; usernameを使って、Linuxサーバにログインするサブルーチン

linux_server = '[IP_ADDR]:22 /ssh /auth=password /user='
strconcat linux_server username
strconcat linux_server ' /passwd=[PASSWORD]'
connect linux_server

return ; サブルーチンの終わりを明示

image.png

image.png

goto文

TeraTermマクロではgotoが使えます。「問答無用で、その部分へ行ってね」という意味合いです。
ただし、forやwhileを抜けるためには使えません。

:input_murakami
inputbox '村上と入力してください' '入力欄'

strcompare '村上' inputstr
if result==0 then
  messagebox 'ありがとうございます' 'メッセージ'
elseif result==1 then
  goto input_murakami
endif

image.png
この例では、入力欄に「村上」と入力しないと、永遠に入力欄が出続けます。
「村上」と入力すると、result==0の方に入り、抜けられます。
image.png

参考

コマンドリファレンスです。ちゃんと文法を調べたい方は使いましょう。
これをAIに学ばせれば良さそう

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?