Hallo Hans-Gerd,
gar nicht so einfach, Deine Aufgabe (und erst noch einen Tag nach Vollmond ;-). Ich musste zuerst etwas nachforschen, um die beste Methode herauszufinden.
Zum Anhängen der Scripts brauchen wir den (langsamen) Finder nicht. Wir müssen die Systemerweiterung "Ordneraktionen" damit beauftragen. Hier eine kurze Erklärung meines Vorschlages.
Der Pfad zum Script, welches angehängt werden soll muss auch irgendwie bestimmt werden. Entweder gibt man ihn "hard-gecodet" im Script ein, oder man wählt die dynamische Choose-file-Lösung. Der Zusatz 'of type "osas"' sorgt dafür, dass in der Auswahl nur Ordner und Scripts sichbar sind.
Der Pfad zum Zielordner wird – wie gewünscht – mit 'choose folder' verlangt. Anschliessend wird eine Liste mit allen Objekten, welche sich im Zielordner befinden, erstellt. Ohne eventuelle unsichtbare Dateien.
Mit einer Repeatschleife geht das Script diese Liste durch. Das Problem dabei: wie unterscheidet man am besten zwischen Ordnern (zu behandeln) und Dateien (zu ignorieren)? Man könnte 'info for' einsetzen. Aber je nach Inhalt des Ordners kann dies dauern. Man könnte auch den Finder einsetzen, aber wie schon oft gesagt, der ist nicht der Schnellste …
Ich habe mir folgendes einfallen lassen. Der Pfad wird zusammengesetzt, als wäre es ein Ordner (mit ":" am Schluss). Dann wird im try-Block geschaut, ob dieses Objekt vorhanden ist. Wenn ja, wird der Handler zum Anhängen aufgerufen. Wenn das Objekt eine Datei ist, dann generiert der Test mit 'alias' einen Fehler und die nächsten Befehle werden nicht ausgeführt.
---
global anAction
set anAction to (choose file with prompt "Ordneraktion wählen:" of type "osas")
set targetFolder to (choose folder with prompt "Zielordner wählen:") as string
set folderList to list folder targetFolder without invisibles
repeat with curItem in folderList
set folderPath to (targetFolder & curItem & ":")
try
alias folderPath
attachScript(folderPath)
openFolder(folderPath)
end try
end repeat
on attachScript(folderPath)
tell application "Ordneraktionen"
attach action to alias folderPath using anAction
end tell
end attachScript
on openFolder(folderPath)
tell application "Finder" to open folder folderPath
end openFolder
---
Wie Du siehst, habe ich das Öffnen der Ordner auch eingebaut. Die Ordner müssen ja offen sein, damit die Ordneraktion ausgeführt wird.
Es ist unmöglich zu prüfen, ob das ausgewählte Script eine Ordneraktion ist. Schlimmer noch: wie leicht klickt man beim Wählen des Zielordners zu früh auf den Button – und schon sind die falschen Ordner mit Scripts versehen.
Keine Panik: ein Script zur Hand haben, welches das Gegenteil macht: Scripts entfernen. Dazu kann der gleiche Aufbau gewählt werden. Den Handler 'attachScript' kann man umtaufen in 'removeScript'. Wichtiger ist aber, dass der Befehl abgeändert wird. Hier das ganze Script.
---
set targetFolder to (choose folder with prompt "Zielordner wählen:") as string
set folderList to list folder targetFolder without invisibles
repeat with curItem in folderList
set folderPath to (targetFolder & curItem & ":")
try
alias folderPath
removeScript(folderPath)
end try
end repeat
on removeScript(folderPath)
tell application "Ordneraktionen"
remove action from alias folderPath using action number 1
end tell
end removeScript
---
Der Name des Scripts, welches entfernt werden soll, wird nicht gebraucht, weil der Index eingesetzt wird. Deshalb fällt auch der 'choose file'-Aufruf weg.
Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418445]