Du rufst z.B. GetFiles ('C:\foo\') auf. Dann suchst Du in 'c:\foo' alle Verzeichnisse und rufst dann für jedes gefundene Verzeichnis wieder GetFiles ('c:\foo\bar') auf, also ohne das letzte '\'. In der nächsten Stufe findest Du natürlich keine Dateien oder Verzeichnisse mehr.
Hänge bei der rekursiven Suche einfach das '\' hinten an den Parameter ran.
Statt:
if not(rightStr(Path.Text,1)='\') then Path.Text:=Path.Text+'\';
verwende lieber
Path.Text := IncludeTrailingPathDelimiter (Path.Text);
Und was ist das?
if FindFirst(mask,[b]$23[/b],Search)=0 then