#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.0
 Author:         H. Tsubota

Script Function:
    カレントフォルダ(通常はスクリプトのあるフォルダ)以下のAutoItスクリプト(拡張子au3)を
    検索し、配列にして返す
    COMのFileSystemObjectを使った実装
#ce ----------------------------------------------------------------------------

#include <Array.au3>

Local $result = Search("au3")
If 0 <= $result[0] Then
    _ArrayDisplay($result, "見つかったファイル")
Else
    MsgBox(0, "", "Error occurred")
EndIf

; カレントフォルダ以下を検索し、見つかったファイルを配列にして返す
; $extension ファイル拡張子。指定が無い場合は任意のファイル。
; $recursively サブフォルダを再帰的に検索するかどうか。デフォルトでは再帰的に検索する。
; 成功 : 見つかったファイル名の配列。1要素目は見つかったファイルの数。
; 失敗 : 1要素目が-1の配列
Func Search($extension = Default, $recursively = True)
    $fso = ObjCreate("Scripting.FileSystemObject")
   
    $folder = $fso.GetFolder(@WorkingDir)
    Local $result[1]
    $result[0] = 0
   
    serachCore($fso, $folder, $extension, $recursively, $result)
   
    Return $result
EndFunc

; 検索処理本体
; $fso : FileSystemObject
; $folder : FileSystemObjectの返すフォルダオブジェクト。検索対象となるフォルダ
; $extension : ファイル拡張子。Defaultの場合は任意のファイル。
; $recursively : サブフォルダを再帰的に検索するかどうか。
; $result : 見つかったファイルが追加される配列
Func serachCore($fso, $folder, $extension, $recursively, ByRef $result)
    For $file In $folder.Files
        If $extension = Default Then
            _ArrayAdd ($result, $fso.GetAbsolutePathName($file.Name))
            $result[0] += 1
        Else
            If $fso.GetExtensionName( $file.Name ) = $extension Then
                _ArrayAdd ($result, $fso.GetAbsolutePathName($file.Name))
                $result[0] += 1
            EndIf
        EndIf
    next
   
    If $recursively Then
        For $subFolder In $folder.SubFolders
            serachCore($fso, $subFolder, $extension, $recursively, $result)
        next
    EndIf
EndFunc

Blog <実験記録 No.02>.