「秀丸マクロ ファイル/フォルダが存在するか確認する」の編集履歴(バックアップ)一覧に戻る
秀丸マクロ ファイル/フォルダが存在するか確認する - (2009/11/11 (水) 17:16:40) のソース
[[外部プログラムから戻り値取得 - 秀丸パイプ>秀丸マクロ 外部プログラムから戻り値を得る方法 - 秀丸パイプの使い方]] の応用例です。 run系命令&バッチでは手軽にできなかった処理として、ファイル/フォルダの確認があります。秀丸パイプ&VBSで実装してみましょう。 *file_exists.vbs - FileSystemObject.FileExists() サンプル #html2(){<pre><code>Option Explicit Dim objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") '標準入力を読んでファイル検索し、標準出力に書き出します If objFSO.FileExists( WScript.StdIn.ReadLine ) = True then Wscript.Echo "True" Else Wscript.Echo "False" End If WScript.Quit</code></pre>} *folder_exists.vbs - FileSystemObject.FolderExists() サンプル #html2(){<pre><code>Option Explicit Dim objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") '標準入力を読んでフォルダ検索し、標準出力に書き出します If objFSO.FolderExists( WScript.StdIn.ReadLine ) = True then Wscript.Echo "True" Else Wscript.Echo "False" End If WScript.Quit</code></pre>} FileSystemObject の詳しい説明は省きますが、標準入力の一行目の文字列を ファイル名 / フォルダ名 として検索し、その結果を標準出力に "True" / "False" の文字列で書き出しています。 *秀丸パイプを使ったマクロからの vbs 呼び出し例 #html2(){<pre><code>loaddll "HmPipe.hmf"; 'file_exists.vbs を呼んでみる $outstr1 = dllfuncstr("HmPipeRun", "C:¥¥WINDOWS¥¥notepad.exe", 		"cscript.exe", "//nologo file_exists.vbs"); 'folder_exists.vbs を呼んでみる $outstr2 = dllfuncstr("HmPipeRun", "C:¥¥Program Files", 		"cscript.exe", "//nologo folder_exists.vbs"); freedll; endmacro;</code></pre>} $outstr1,2 にはそれぞれ、検索した結果が "True" / "False" として格納されています。 ---- 秀丸マクロは、本来はテキストエディタ用のマクロです。 なので、チリトマトもファイル内容の解析編集などは基本的にマクロ側で行うべきだと思っています。 しかし FileSystemObject には多くの機能が詰まっており、秀丸パイプと組み合わせれば、マクロ環境に用意されていない複雑なファイル管理も呼び出せるようになります。マクロと外部スクリプトをうまく住み分けて連携すれば、より高機能な自作ツールを高い開発効率を実現できると思います。 ----