Код:
	  procedure Find(const Path, SearchMask : String; var Memo : TMemo);
  var
    fs : TSearchRec;
    i : Integer;
  begin
    Application.ProcessMessages;
    i := FindFirst(Path + '\' + SearchMask, faAnyFile, fs);
    while i = 0 do begin
      Memo.Lines.Add(path + '\' + fs.Name);
      i := FindNext(fs);
    end;
    i := FindFirst(Path + '\*', faDirectory or faAnyFile, fs);
    while i = 0 do begin
      if (fs.Name <> '.') and (fs.Name <> '..') and
         ((fs.Attr and faDirectory) <> 0) then
        Find(Path + '\' + fs.Name, SearchMask, Memo);
      i := FindNext(fs);
    end;
    FindClose(fs);
  end; 
 
Path - эт путь где искать, можно указать просто диск (С, D и т.д.), поиск будет осуществляться во всех вложенных папках, SearchMask - маска поиска, чтоб найти все txt файлы пишем тут *.txt, Memo - сюда будут выводится резалты поиска. Просто по очереди ищите файлы каждого разрешения.