Hallo Stephan,
obwohl alles wunderbar tönt, glaube ich nicht, dass der Tiger eine Batch-Suche nach Deinem Muster
ermöglicht. Du hättest Dich halt damit beizeiten an Steve wenden sollen! ;-)
Von wegen rekursiv: Es kommt darauf an, wie die Daten organisiert sind. Wenn in einem Hauptordner
lauter Unterordner sind, welche die gesuchten Dateien enthalten können, dann kann man mit einer
einfachen Wiederholungsschleife die Ordner abklappern.
Wenn aber die Unterordner selbst Unterordner enthalten, welche berücksichtigt werden müssen, dann
kommt man um einen rekursiven (= sich selbst aufrufenden) Code nicht herum.
Das Prinzip ist einfach. Angenommen, das Script ist ein Droplet, werden die gedroppten Objekte einem Handler
übergeben. Dieser stellt fest, ob es sich um einen Ordner oder um eine Datei handelt. Dateien werden
einem weiteren Handler übergeben. Bei einem Ordner wird dessen Inhalt in eine Liste gegeben. Diese
Liste wird zum Handler, in welchem das Auspacken des Ordners geschieht, geschickt, damit dieser wieder
testen kann, ob die Objekte Dateien oder Odner sind usw. usf.
Zur Illustration etwas Code, damit die Sache verständlicher ist.
---
-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
-- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt
repeat with aObject in allObjects
processObject(aObject)
end repeat
end open
-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist
-- bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt (d.h. zum aktuellen Handler geschickt)
-- Dateien werden zum Handler 'processFile' gesandt
on processObject(aObject)
-- wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner
if (aObject as string) ends with ":" then
-- die Liste der Objekte wird erstellt (ohne unsichtbare Dateien)
set contentsList to list folder aObject without invisibles
-- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler, in welchem sie sich selbst befindet
repeat with anItem in contentsList
set objPath to ((aObject as string) & anItem)
processObject(objPath as alias)
end repeat
else
processFile(aObject as string)
end if
end processObject
-- in diesem Handler wird die Datei behandelt
on processFile(aFile)
-- entsprechende Befehle hier einfügen
display dialog "" & aFile as string
end processFile
---
Dies gilt aber nur für "normale" Ordner und Dateien. Programme, z.B., kommen auch mit Doppelpunkt am Ende des
Pfades daher. Und Packages auch. Aber beide müsste man anders behandeln.
Gruss, Hans
als Antwort auf: [#419586]