複数の機器からログを取ると、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から複数台へ接続する記事で解説しています。