#include <Array.au3> ; для _ArrayDisplay.
#include <Constants.au3>

; Рекурсивно выдавать список файлов каталога.
Example()

Func Example()
	Local $sFilePath = @ScriptDir ; Поиск в текущем каталоге со скриптами.
	Local $sFilter = "*.*" ; Поиск всех файлов в текущем каталоге. Правильный формат маски поиска ищите по слову 'Wildcards' в текущей справке.
	Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

	; Если указанный путь не является каталогом, то выход из функции.
	If Not StringInStr(FileGetAttrib($sFilePath), "D") Then
		Return SetError(1, 0, 0)
	EndIf

	; Удаляет завершающие слеши и добавляет один обратный слеш в конце.
	$sFilePath = StringRegExpReplace($sFilePath, "[\\/]+\z", "") & "\"

	#cs
		Параметры ком-строки для DIR:
		/B - вывод только имен.
		/A-D - поиск всех файлов, без папок.
		/S - поиск в подкаталогах.
	#ce
	Local $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /A-D /S', $sFilePath, @SW_HIDE, $STDOUT_CHILD)

	; Закрывает поток Stdio используя PID возвращённый функцией Run. Это вызывает диалоговое окно из-за невозможности читать поток stdout.
	StdioClose($iPID) ; закомментируйте эту строку, чтобы увидеть результаты

	While 1
		$sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
		If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
			ExitLoop
		EndIf
	WEnd

	; Используется StringSplit для разделения результатов вывода StdoutRead в массив. Удаляются все символы @CR, а @LF используется как разделитель.
	Local $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@LF)), @LF)
	If @error Then
		MsgBox(4096, "", "Произошла ошибка при попытке найти все файлы в текущем каталоге скриптов.")
	Else
		; Вывод результатов.
		_ArrayDisplay($aArray)
	EndIf
EndFunc