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

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

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

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

マクロの目的

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

利用可能環境

Teraterm
依存する Tera Term バージョン:Tera Term 4.69 以降*1
→ サンプルのサブルーチン内コマンドで必要なバージョンとしています。

利用する Tera Term コマンド:
種別:制御Ver機能の簡易説明
callサブルーチンをコールする。
endマクロの実行そのものを終了する。
if,then,elseif,else,endif条件分岐
returnサブルーチンを抜け、メインルーチンへ戻る。
種別:文字列操作Ver機能の簡易説明
sprintf24.62以降フォーマットされた出力を返す。
種別:ファイル操作Ver機能の簡易説明
filecloseファイルハンドルを閉じる。
fileopenファイルを開く。
filesearchファイルまたはフォルダがあるか確かめる。
filewriteファイルに文字列を書き込む。
foldersearch4.69以降フォルダがあるか確かめる。
種別:その他Ver機能の簡易説明
getdate現在の日付を得る。
4.57以降書式を指定するオプションの追加。
4.58以降互換性維持のための仕様変更。
4.74以降タイムゾーンを指定するオプションの追加。
4.80以降マクロ実行前後でタイムゾーンを復元するよう仕様変更。
messageboxダイアログボックスを開き、ユーザーにメッセージを知らせる。
4.54以降特殊文字の解釈を制御するオプションの追加。
4.60以降キャンセル時にマクロ停止を確認する機能の追加。

マクロの使い方

別途開発する Tera Term マクロの最後に追記(組み込んで使用)してください。

*1 : 保存する文字コードによっては Tera Term バージョン 4.102 以降

コード

著作権情報

このサンプルマクロに関する著作権は、当サイト管理者が所有しています。
著作権者
神場 和也(著作人格権は放棄しません)
ライセンス
ほかのプログラムへ、現状のまま組み込んで利用する限り、著作者の許諾は不要です。
改変する場合においては、改変した者もしくは改変を許可した法人がすべての責任を負うことを求めます。
なお、著作人格権を持つものに無断でコード自体を商材として利用することを禁じます。
関連情報
(なし)

サンプルコード

;;; 変数設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 必須となる変数の設定
targetname = 'dummy.txt'

;;; メイン処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; サブルーチンのコール
call fnChkFile

; 結果の表示
messagebox result 'result'

; 対象が存在しない場合にのみファイル作成
if result = 0 then
    getdate YYYYMMDD_hhmmss "%Y/%m/%d %H:%M:%S"
    fileopen fhandle targetname 0
    sprintf2 msg "%s ファイル %s を作成しました。" YYYYMMDD_hhmmss targetname
    filewrite fhandle msg
    fileclose fhandle
endif

;;; 終了処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; マクロの終了
end

;;; サブルーチン ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:fnChkFile
; 変数 targetname 内の文字列がファイルかフォルダかを判定するサブルーチン
; result
; 0 = 対象は存在しなかった。
; 1 = 対象はフォルダだった。
; 2 = 対象はファイルだった。

filesearch targetname
if result = 1 then
    ; 対象が存在する場合

    ; フォルダであるか確認する
    foldersearch targetname 
    if result = 1 then
        ; フォルダの場合 (存在する対象がフォルダである)
        result = 1

    else
        ; ファイルの場合 (存在するがフォルダではない)
        result = 2
    endif

else
    ; 対象が存在しない場合
    result = 0

endif

return

備考

特にありません。