「秀丸マクロ ファイル/フォルダが存在するか確認する」の編集履歴(バックアップ)一覧に戻る
秀丸マクロ ファイル/フォルダが存在するか確認する - (2009/11/09 (月) 04:37:40) の編集履歴(バックアップ)
外部プログラムから戻り値取得 - 秀丸パイプ の応用例です。
run系命令&バッチでは手軽にできなかった処理として、ファイル/フォルダの確認があります。秀丸パイプ&VBSで実装してみましょう。
run系命令&バッチでは手軽にできなかった処理として、ファイル/フォルダの確認があります。秀丸パイプ&VBSで実装してみましょう。
file_exists.vbs
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
folder_exists.vbs
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
秀丸マクロからの呼び出し例
loaddll "HmPipe.hmf";
$outstr1 = dllfuncstr("HmPipeRun", "C:¥¥Program Files",
"cscript.exe", "//nologo folder_exists.vbs");
freedll;
endmacro;
- loaddll 任意のライブラリ / freedll ...
任意のライブラリをロード / 解放します。解放するまで、ロードしたライブラリの関数機能を呼び出すことが出来ます。
ロードできるライブラリは一つです。何度か loaddll を呼んで複数のライブラリをロードしても、自動的にそれ以前のライブラリは freedll されます。
重大なお約束として、使い終わったライブラリは必ず解放するようにしましょう。
ロードできるライブラリは一つです。何度か loaddll を呼んで複数のライブラリをロードしても、自動的にそれ以前のライブラリは freedll されます。
重大なお約束として、使い終わったライブラリは必ず解放するようにしましょう。
- dllfuncstr ( 関数名 [,...] ) ...
関数名を指定して、ライブラリから任意の関数を呼び出します。二個目以降の引数には、数値、文字列などを自由に記述できます。
- dllfuncstr("HmPipeRun", 入力文字列, 実行ファイルパス, 実行ファイル引数 ) ...
秀丸パイプから、HmPipeRun という関数を呼び出します。HmPipeRun 関数は基本的に run 系命令の上位版ですが、最大の特徴として "入力文字列" を標準入力として渡し、戻り値として標準出力を文字列型で取得できます。
とりあえず入力文字列を2回繰り返して標準出力に返してみましょう。
- 秀丸マクロからの呼び出し
message dllfuncstr("HmPipeRun", "hoge", "cscript.exe", "//nologo test.vbs" );
- test.vbs
Option Explicit
'標準入力を取得
Dim output
output = WScript.StdIn.ReadAll
'標準出力に書き出し
Wscript.Echo output
Wscript.Echo output
Wscript.Quit
- 実行結果
imageプラグインエラー : ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (hogehoge.jpg)
MSDN によると、StdIn が読めるのは CScript.exe だけで、WScript.exe ではムリだそうです。
nologo オプションを指定しておかないと、StdOut に熱心なコーポレートロゴが書き込まれます。迷惑な…。
MSDN によると、StdIn が読めるのは CScript.exe だけで、WScript.exe ではムリだそうです。
nologo オプションを指定しておかないと、StdOut に熱心なコーポレートロゴが書き込まれます。迷惑な…。
file_exists.vbs の準備
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
まず、vbsを書きます。