ネットワーク

Teratermマクロのログファイル名を「ホスト名_日付.txt」にする

複数の機器からログを取ると、log.txt のような固定名では上書きされてしまいます。ログファイル名を test-FW_20210603.txt のように「ホスト名_日付」にする方法をまとめます。

完成コード

HostName = 'test-FW'

; マクロがあるフォルダを取得
getdir MacroPath

; 今日の日付を取得して年月日に分解
getdate TestDate
strcopy TestDate 1 4 year
strcopy TestDate 6 2 month
strcopy TestDate 9 2 day

; ファイル名を組み立てる
LogName = ''
strconcat LogName HostName
strconcat LogName '_'
strconcat LogName year
strconcat LogName month
strconcat LogName day
strconcat LogName '.txt'

; フルパスを作成
makepath LogFilePath MacroPath LogName

; ログ開始
logopen LogFilePath 0 1

これで、マクロと同じフォルダに test-FW_20210603.txt が作られます。

処理の流れ

ステップ コマンド 結果
1 getdir MacroPath マクロのフォルダパスを取得
2 getdate TestDate 2021-06-03
3 strcopy TestDate 1 4 year 2021
4 strcopy TestDate 6 2 month 06
5 strcopy TestDate 9 2 day 03
6 strconcat を繰り返す test-FW_20210603.txt
7 makepath C:\macro\test-FW_20210603.txt

もっと短く書く方法

getdate に書式を指定すれば、strcopy での分解が不要になります。

HostName = 'test-FW'
getdir MacroPath
getdate TodayStr "%Y%m%d"

sprintf2 LogName '%s_%s.txt' HostName TodayStr
makepath LogFilePath MacroPath LogName
logopen LogFilePath 0 1

7行が3行になります。日付の切り出し位置を間違える心配もありません。

時刻も入れる場合

同じ日に何度もログを取ると追記されて見づらくなります。時刻まで入れるとファイルが分かれます。

getdate TodayStr "%Y%m%d"
gettime NowStr "%H%M%S"

sprintf2 LogName '%s_%s_%s.txt' HostName TodayStr NowStr

test-FW_20210603_103958.txt になります。

gettime を書式なしで使うと 10:39:58 が返り、: はファイル名に使えません。必ず "%H%M%S" を指定してください。

ホスト名を機器から自動で取る

ホスト名を手で書くと、機器を増やすたびにマクロを直すことになります。CSVから読み込む方法が実用的です。

strsplit buf ','
HOSTNAME = groupmatchstr1

詳しくはCSVから複数台へ接続する記事で解説しています。

関連記事

-ネットワーク