2019/07/26(金)ファイル/フォルダ判定サブルーチン fnChkFile

2021/05/21 06:54 Macro::macro サンプル

ファイル/フォルダ判定サブルーチン fnChkFile

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

指定の変数 <targetname> に格納した文字列が、ファイルなのかディレクトリなのか、以下の戻り値 <result> で出力します。
<result>意味
0対象は存在しなかった。
1対象はフォルダだった。
2対象はファイルだった。

続きを読む

2019/07/24(水)ホスト選択式ログイン自動化マクロ(マスターパスワード利用版)

2021/05/21 06:51 Macro::macro サンプル

ホスト選択式ログイン自動化マクロ(マスターパスワード利用版)

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

選択したホストに対するアクセス情報を保持し、同一ホストに対する 2 回目以降のパスワード入力を回避します。
選択可能なホストは以下の通りとします。

プロトコル想定OS備考
SSHUNIX / LinuxWindows でも sshd サーバを稼働すれば可能。
RDPWindowsLinux でも xrdp 等を稼働すれば可能。
TelnetCisco IOSローカルからアクセスするスイッチングハブ等

また、毎回デフォルト設定で良いか問い合わせ、アクセス情報の変更があった場合も収集情報を保持することとします。
この機能により、アクセス先情報を変更した同一ファイルを複数実行しても、パスワードファイル内でコンフリクトしないようになります。

ただし、保持するアクセス情報はサーバへのログインとは別に、毎回のパスワード入力を必須とします。
この目的のために Tera Term の getpasswd コマンドで作成したパスワードファイルを、暗号化または解凍します。

アーカイブ作成・解凍のための前提アプリに、コマンドライン版 7zip を利用します。
7zip は、GNU LGPL ライセンスによって開発されているアーカイバです。
https://sevenzip.osdn.jp/

続きを読む

エスケープ文字


エスケープ文字

Tera Term マクロに限らずプログラムではエスケープ文字を利用したくなる場面があります。

例えば、シェルで改行文字をエスケープすると、内容によっては長くなってしまう1行も、適切に改行することで見やすいスクリプトになります。
$ cat sample.sh
#!/bin/bash
the_first_value="5"
the_second_value="6"
printf "This sample calculation message %s + %s = %s\n" \
  ${the_first_value} \
  ${the_second_value} \
  $((the_first_value + the_second_value))
$ bash sample.sh
This sample calculation message 5 + 6 = 11
例えば、括り文字 (シングルクォーテーション ' や、ダブルクォーテーション " のこと)をエスケープすると、括り文字の中で括り文字を扱うことができます。
$ echo "This is \"double Quotation\" sample"
This is "double Quotation" sample

結論

結論を言うと、現時点*1において Tera Term にエスケープ文字はありません。

*1 : Tera Term バージョン 4.103

代替方法

エスケープする方法がないため、上記の使用例に対する代替案を記します。

ASCII コードを直指定

括り文字の中に括り文字を利用する場合は、ASCII コードを直に指定する方法があります。
指定方法
ASCII コードを利用
Tera Term で ASCII コードを指定するには、文字に割り振られた番号に # を付与します。

'#' で数値が記述場合、10進数 (0~9) での指定です。
'#$' で数値が記述されている場合、16進数 (0~F) での指定です。

たとえば Tera Term で文字 A を指定する場合、10進数では #65 を、16進数では #$41 を記述します。
ASCII コードで指定可能な文字については ASCII コード を参照してください。
制御文字/印字可能文字に関わらず指定可能です。

・ASCII コードでの代替指定
sprintf "This is "#34"double quotation"#$22
messagebox inputstr 'message test'
ASCII コードでの指定

クォーテーションの種類を変える
厳密にいうと代替方法ではありませんが、シングルクォーテーションの中でダブルクォーテーションを利用することは可能です。
sprintf 'This is "double quotation"'
messagebox inputstr 'message test'
制限事項
上述のような ASCII コード指定する場合は、クォーテーションの中に入れることができません。

・ASCII コードの指定をミスしている例
sprintf "This is #34double quotation"#$22
messagebox inputstr 'message test'
クォートを指定ミスしている例


また、一連の文字列にはスペースを入れることができません。

・ASCII コードが反映されない例
sprintf "This is " #34 "double quotation"#$22
messagebox inputstr 'message test'
反映されない例


スペースも ASCII コードで指定可能なので、以下のように記述します。

・スペース文字を指定した例
sprintf "This is"#32#34"double quotation"#34
messagebox inputstr 'message test'

strconcat

文字列を、何列かに分けて組み立てたい場合は strconcat を利用することで代替できるかもしれません。

もともと strconcat を使っているものを sprintf2 に代替したものが Linux SSH ですが、逆に sprintf2 を strconcat で分解する方法としても参考になると思います。

2019/07/17(水)RDP ログイン自動化マクロ(マスターパスワード利用版)

2021/05/21 06:42 Macro::macro サンプル

RDP ログイン自動化マクロ(マスターパスワード利用版)

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

Windows RDP でのアクセス情報を保持し、同一ホストに対する 2 回目以降のパスワード入力を回避します。

また、毎回デフォルト設定で良いか問い合わせ、アクセス情報の変更があった場合も収集情報を保持することとします。
この機能により、アクセス先情報を変更した同一ファイルを複数実行しても、パスワードファイル内でコンフリクトしないようになります。

ただし、保持するアクセス情報はサーバへのログインとは別に、毎回のパスワード入力を必須とします。
この目的のために Tera Term の getpasswd コマンドで作成したパスワードファイルを、暗号化または解凍します。

アーカイブ作成・解凍のための前提アプリに、コマンドライン版 7zip を利用します。
7zip は、GNU LGPL ライセンスによって開発されているアーカイバです。
https://sevenzip.osdn.jp/

続きを読む

マクロのオプション

2021/05/18 05:51 Macro::macro 仕様

マクロのオプション

ttpmacro.exe にはオプションが指定可能です。

Tera Term バージョン 4.92 から、以下の仕様になっています。

コマンドラインオプション

Tera Term マクロには、コマンドラインオプションを指定することができます。

指定方法は、以下の通りです。
TTPMACRO.EXE [/I] [/V] [<macro file> [<parameters>...]]
[/I]
マクロ起動時に、マクロをアイコン化します。

[<macro file>] より後に記述された場合は、マクロファイルのオプションとして扱われます。
また、拡張子 .ttl のマクロファイルから ttpmacro.exe を起動した場合は、このオプションは省略されたものとして扱われます。
[/V]
マクロ起動時に、マクロを隠します。

[<macro file>] より後に記述された場合は、マクロファイルのオプションとして扱われます。
また、拡張子 .ttl のマクロファイルから ttpmacro.exe を起動した場合は、このオプションは省略されたものとして扱われます。
[<macro file>]
マクロファイル名を指定します。

ファイル名が絶対パスでないときは、ttpmacro.exe からの相対パスと見なされます。
ファイル名はディレクトリ情報が取り除かれ、システム変数 param1 および params[1] に格納されます。

param1 は文字列型ですが、params[1] は文字列型配列になっています。
[<macro file> [<parameters>...]]
[<macro file>] 以降のパラメータは、マクロファイルへ渡したい情報を指定します。

これらはシステム変数 param2 ~ param9 に格納されます。
param10 以降に相当する変数は存在しません。

また、params[2](文字列型配列 params の 3 番目の要素)から順番に格納されます。
文字列型配列であるため、理論的には params[10] 以降は 65536 まで指定可能と思われます。

Windows Vista 以降のコマンドプロンプトでは、以下の制約が存在します。
Windows Vista 以降の コマンド プロンプト (Cmd.exe) では、8192 文字以上の引数を受け付けられますが、8192 文字以上の引数を渡した場合には、以下の現象が発生する可能性があります。

・echo コマンドで、8192 文字目以降の引数が切り捨てられる。
・cmd.exe から、子プロセスを起動する際、渡される引数の一部に抜けが生じる。
https://support.microsoft.com/ja-jp/help/2823587
文字列型も文字列型配列も、最長 511 文字まで指定可能です。

備考

ラベルを用いたサブルーチン (call) や、別ファイルを呼び出すインクルード(include)には、オプションを指定することができません。