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

 AutoIt Version: 3.3.8.0
 Author:         H. Tsubota

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

#include <Array.au3>
#include <Constants.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 $child
    Local $buffer
    Local $command
   
    ; コマンドを作成
    $command = @ComSpec & " /c dir"
   
    ; 検索するファイルの拡張子指定
    If $extension = Default Then
        $command &= " *.*"
    Else
        $command &= " *." & $extension
    EndIf
   
    ; サブフォルダを検索するかどうか
    If $recursively Then
        $command &= " /b /s"
    Else
        $command &= " /b"
    EndIf   
   
    ; dirを実行
    $child = Run($command , @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    ; dirが処理を返すのを待って標準出力を読み取る
    Local $dirResult = ""
    While 1
        SetError(0)
        $buffer = StdoutRead($child)
        If @error Then
            ExitLoop
        EndIf
        Sleep(100)
        $dirResult = $buffer
    Wend
   
    ; dirの結果から結果配列を作成
    Local $result[1]
    if $dirResult <> "" Then
        $result = StringSplit($dirResult, @CRLF, 1)
        $result[0] = _ArrayDelete($result, $result[0])
        $result[0] -=1
    Else
        $result[0] = -1
    EndIf

    Return $result
EndFunc

Blog <実験記録 No.02>.