フォルダが無ければ作成する
Tera Term マクロではログファイルを保存する処理を行うことが良くありますが、保存先に指定したフォルダが存在するかのチェックと、存在しない場合にフォルダを作成するという処理が必要になる場合があります。
この記事ではフォルダの存在チェックの方法、フォルダの作成方法について説明します。
動作確認環境
- Tera Term Version 4.104
フォルダ存在有無をチェックする方法【foldersearch】
Tera Term マクロで指定のフォルダが存在するかチェックするためには foldersearch コマンドを使用します。
- foldersearch <フォルダパス>
- <フォルダパス>:存在チェック対象のフォルダのパスを指定。パスは絶体パスまたはマクロファイル格納フォルダからの相対パスで指定可能
- 指定フォルダの存在有無によってシステム変数 result に以下の通り値が格納される
- 存在する ⇒ result ← 1
- 存在しない ⇒ result ← 0
上記の通りチェック結果に基づいて result に値が格納されるため、foldersearch 実行後の result の値で条件分岐させることでフォルダ有無によって処理を変えることができます。
以下はマクロファイル格納フォルダ内に「samplefolder」という名前のフォルダが存在するかどうかをチェックし、結果をメッセージで表示するマクロです。
foldersearch 'samplefolder'
if result = 0 then
messagebox '指定フォルダは存在しません' 'result'
elseif result = 1 then
messagebox '指定フォルダは存在します' 'result'
endif
フォルダを作成する方法【foldercreate】
Tera Term マクロでフォルダを作成するためには foldercreate コマンドを使用します。
- foldercreate <フォルダパス>
- <フォルダパス>:作成対象のフォルダのパスを指定。パスは絶体パスまたはマクロファイル格納フォルダからの相対パスで指定可能
- コマンド実行結果によってシステム変数 result に以下の通り値が格納される
- フォルダ作成に成功 ⇒ result ← 0
- 成功以外の結果 ⇒ result ← 0 以外の値
以下はマクロファイル格納フォルダ内に「samplefolder」という名前のフォルダを作成するマクロです。
foldercreate 'samplefolder'
フォルダが存在しなければ作成する方法
指定のフォルダが存在しない場合にフォルダを作成するためには、上で説明した foldersearch と foldercreate を組み合わせて使用します。処理の流れは以下です。
- foldersearch で対象フォルダの存在チェックをする
- 結果 result が 0 の場合(フォルダが存在しない場合)foldercreate でフォルダを作成する
これをマクロにすると以下のようになります。
; 対象フォルダパスを変数で定義
myfolder = 'samplefolder'
; フォルダ存在チェック
foldersearch myfolder
; フォルダが存在しない場合はフォルダ作成
if result = 0 then
foldercreate myfolder
endif
【注意】フォルダ階層をまとめて作成することはできない
foldercreate でフォルダ階層を指定した場合で階層途中のフォルダが存在しない場合、フォルダ作成は失敗します。このため階層の下位のフォルダから一つずつフォルダ作成する必要があります。
例えば、「hoge\piyo」というフォルダを作成したい場合で「hoge」フォルダが存在しない場合は、まず「hoge」フォルダを作成し、次に「hoge\piyo」フォルダを作成するという2ステップが必要になります。
まとめ
- フォルダの存在チェックは foldersearch で行い、フォルダの作成は foldercreate で行う
- フォルダ階層をまとめて作成することはできず、1階層ずつフォルダを作成する必要がある
- 基礎知識
- コマンド解説
- ログイン
- コマンド実行
- ログ保存
- ファイル・フォルダ操作
- 文字列操作
- 変数関連
- マクロのモジュール化
- テクニック
- サブルーチン
- オリジナルマクロ
コメント