Procedure FileSearch(List Files.s(), dir.s, mask.s = "")
	Protected name.s, id

	If Right(dir, 1) <> #PS$
		dir + #PS$
	EndIf

	id = ExamineDirectory(#PB_Any, dir, "")
	If id
		While NextDirectoryEntry(id)
			name = DirectoryEntryName(id)
			If name = "." Or name = ".."
				Continue
			EndIf
			If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory ; если путь является папкой
				FileSearch(Files(), dir + name + #PS$, mask)   ; рекурсивный вызов подпапки
			ElseIf (Not Asc(mask) Or GetExtensionPart(name) = mask) And AddElement(Files())
				Files() = dir + DirectoryEntryName(id)
			EndIf
		Wend
		FinishDirectory(id)
	EndIf
EndProcedure

Define NewList Files.s()
FileSearch(Files(), GetTemporaryDirectory(), "exe") ; пустая строка для поиска всех файлов

ForEach Files()
	Debug Files()
Next