Hallo Willem,
hier schon mal eine erste Lösung. Anwendung: Den Master-Ordner auf das Icon des Droplets
ziehen und abwarten. Das Script geht die Ordnerstruktur mit einem rekursiven (= sich selbst
aufrufenden) Handler durch. Die Name der aktuellen Datei wird mit dem Inhalt einer Liste
verglichen. Falls der Name nicht vorkommt, wird er an die Liste gehängt. Sonst wird die
Datei eingefärbt.
Der Einfachheit halber wird für alle Dateien dieselbe (rote) Etikettenfarbe verwendet. Nach
den Testläufen zu schliessen, sollte dies ausreichen.
Noch etwas: Wenn z.B. vier gleichnamige Dateien gefunden werden, dann färbt das Script nur
drei davon ein. Ich hoffe sehr, dass dies okay ist (sonst würde es kompliziert ...).
---
global ctr
global mainList
-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
display dialog "Den Master-Ordner auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run
-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
-- die Zählervariable initialisieren
set ctr to 0
-- eine Liste vorbereiten
set mainList to {}
-- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt
repeat with aObject in allObjects
processObject(aObject)
end repeat
if ctr is 0 then
display dialog "Keine mehrfach vorhandenen
Dateien gefunden." buttons "OK" default button 1 with icon 1 giving up after 3
else if ctr is 1 then
display dialog "Eine einzige doppelte Datei gefunden." buttons ¬
"OK" default button 1 with icon 1 giving up after 3
else if ctr is greater than 1 then
display dialog "Mehrfach vorhandene Dateien: " & ctr buttons ¬
"OK" default button 1 with icon 1 giving up after 3
end if
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)
-- der Test stellt den Wert der Variable fest und die entsprechende Aktion wird ausgelöst
if (aObject as Unicode text) 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 Unicode text) & anItem)
processObject(objPath as alias)
end repeat
else
processFile(aObject as Unicode text)
end if
end processObject
-- in diesem Handler werden die Dateien behandelt
on processFile(aFile)
-- der Name der aktuellen Datei wird festgestellt
set curName to name of (info for file aFile)
-- falls dieser Name noch nicht in der Haupliste ist ...
if curName is not in mainList then
-- ... wird er daran angefügt ...
set end of mainList to curName
else
-- ... sonst wird die Datei eingefärbt
tell application "Finder" to set label index of file aFile to 2
-- der Wert der Zählervariable wird um eins erhöht
set ctr to ctr + 1
end if
end processFile
---
Ein zweites – ähnlich aufgebautes – Droplet setzt die Etikettenfarbe zurück auf "Keine".
Kann vielleicht mal nützlich sein. Beide Scripts sind unterwegs zu Dir.
Gruss, Hans
als Antwort auf: [#420134]