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

 AutoIt Version: 3.3.8.0
 Author:         H. Tsubota

Script Function:
    カレントフォルダ(通常はスクリプトのあるフォルダ)以下のAutoItスクリプト(拡張子au3)を
    検索し、配列にして返す
    AutoItのFileFindFirstFile関数, FileFindNextFile関数を使った実装
#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)
    Local $result[1]
    $result[0] = 0
   
    If Not SearchCore($extension, $recursively, $result) Then
        $result[0] = -1
    EndIf

    Return $result
EndFunc

; 検索処理本体
; $extension : ファイル拡張子。Defaultの場合は任意のファイル。
; $recursively : サブフォルダを再帰的に検索するかどうか。
; $result : 見つかったファイルが追加される配列
Func SearchCore($extension, $recursively, ByRef $result)
    $search = FileFindFirstFile("*")
    If $search = -1 Then
        $result[0] = -1
        Return False
    EndIf

    While True
        $file = FileFindNextFile($search)
        If @error Then
            ExitLoop
        EndIf
       
        If $recursively And FileGetAttrib ($file) = "D" Then
            ; サブフォルダの再帰検索
            $buffer = @WorkingDir
            FileChangeDir ( @WorkingDir & "\" & $file )
            $success = SearchCore($extension, $recursively, $result)
            FileChangeDir ( $buffer )
            If Not $success Then
                $result[0] = -1
                Return False
            EndIf
        Else
            ; ファイル処理
            If $extension = Default Then
                _ArrayAdd ($result, @WorkingDir & "\"& $file)
                $result[0] += 1
            ElseIf $extension = GetExtension($file) Then
                _ArrayAdd ($result, @WorkingDir & "\"& $file)
                $result[0] += 1
            EndIf
        EndIf
    WEnd
    FileClose($search)
    Return True 
EndFunc 

; ファイル名から拡張子を取得
Func GetExtension($fileName)
    Local $words = StringSplit($fileName, ".")
    Return $words[$words[0]]
EndFunc   ;==>GetExtension

Blog <実験記録 No.02>.