Du solltest mal die Suchfunktion bemühen. IMO existieren hier im Forum mehrere Lösungen. Das Zauberwort lautet "rekursiver" Aufruf, d.h. du musst in deiner Prozedur auch nach Ordnern suchen, dann in diese Ordner springen und die Prozedur erneut aufrufen.
Der EDH enthält ebenfalls ein Beispiel.
Aber spätestens hier wäre mein Vorschlag für die eleganteste und kürzeste Methode noch einmal der Verweis auf die Shell-Funktion
SHFileOperation. Auch dafür sollte der EDH ein Beispiel enthalten.
Ansonsten (bei AUQ.de gefunden):
http://www.swissdelphicenter.ch/en/showcode.php?id=152