VBSには関数ポインタやラムダ式は無いが Execute ステートメント(もしくはExecuteGlobal ステートメント)を使うと擬似的にコールバックを実現できる。
関数名を文字列として呼び出し側関数に渡し、呼び出し位置で以下のようにすればいい。
Execute 関数名 & " " & 引数
例えば以下のサンプルの様にファイルを再帰的に検索する SearchRecursively() を作成しておいて、見つかったファイルに対して行う処理をコールバックで定義しておけば後から処理を簡単に差し替えることができる。
'D:\Workspace以下のファイルを検索してMyCallback1で処理
SearchRecursively "D:\Workspace", "MyCallback1"
' コールバック関数例
' 渡されたパスを表示する
Sub MyCallback1(ByVal filePath)
Wscript.echo filePath
End Sub
' フォルダ内を再帰的に検索し、ファイルをコールバック関数で処理する
' @param folderPath 検索を行うフォルダのフルパス
' @param callbackFunc 行う処理を定義した関数の名前
Sub SearchRecursively(ByVal folderPath, ByVal callbackFunc)
' フォルダパスからフォルダオブジェクトを作成
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folder
Set folder = fso.GetFolder(folderPath)
Dim file
For Each file in folder.Files
' ファイルをコールバック関数で処理
Execute callbackFunc & " """ & file.path & """"
Next
Dim subfolder
For Each subfolder in folder.SubFolders
' フォルダ内のファイルを再帰的に検索
SearchRecursively subfolder.path, callbackFunc
Next
End Sub