Forenindex » Programmierung/Entwicklung » AppleScript » per applescrict ordnerscripte anhaengen

per applescrict ordnerscripte anhaengen

Anonym
Beiträge gesamt: 22827

10. Nov 2003, 11:57
Bewertung:

gelesen: 1471

Beitrag als Lesezeichen
hallo forum!

wie kann ich den finder ansprechen um automatisch einem folder eine ordneraktion anzuhaengen?

konkret:
ich moechte per choose folder einen ordner oeffnen, dessen unterordner (keine unter-unterordner) alle mit dem gleichen script versehen werden sollen.

habt einen schoenen tag :-)

cu

hans-gerd

per applescrict ordnerscripte anhaengen

Hans Haesler
  
Beiträge gesamt: 5826

10. Nov 2003, 15:47
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
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>

per applescrict ordnerscripte anhaengen

Anonym
Beiträge gesamt: 22827

10. Nov 2003, 16:41
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
hallo hans!

zum glueck habe ich dir die aufgabe nicht lueckenlos geschildert, denn dann duerfte ich ja gar nicht mehr wurschteln  &#133; ;-)

unglaublich wie schnell und gewissenhaft du bist.
die scripts fluppen wunderbar &#133;

beste gruesse

hans-gerd classen

per applescrict ordnerscripte anhaengen

Hans Haesler
  
Beiträge gesamt: 5826

10. Nov 2003, 19:48
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
Hallo Hans-Gerd,

als Scripter kann man nicht gewissenhaft genug sein!

Spass beiseite &#133; Einen Verbesserungsvorschlag habe ich noch: Die Scripts in Droplets umwandeln.
Vorteil: der Dialog zum Bestimmen des Zielordners fällt weg. Und damit wird auch die Gefahr,
einen falschen Ordner auszuwählen extrem reduziert.

Wenn Du Interesse hast, kann ich Die die Lösung zustellen. Du kannst dann immer noch daran
herumbasteln. ;-)

Hans Haesler <hsa@ringier.ch>

per applescrict ordnerscripte anhaengen

Anonym
Beiträge gesamt: 22827

11. Nov 2003, 09:00
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
guten morgen hans!

dein angebot nehme ich gerne an. :D

cu

hans-gerd

per applescrict ordnerscripte anhaengen

Hans Haesler
  
Beiträge gesamt: 5826

11. Nov 2003, 11:36
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
Hallo Hans-Gerd,

dachte ich mir. ;-)

Das Droplet ist bereit. Es ist konfigurierbar, also speziell anwenderfreundlich.

Beim ersten Ausführen (Ziehen des Ordners auf das Icon) erscheint der 'choose file'-Dialog. Nach dem Auswählen des Scripts, wird in einem weiteren Dialog der Pfad gezeigt. Drei Buttons: "Abbruch", "Modifizieren", "OK". Man kann also die Wahl des Scripts korrigieren. Nach dem Klick auf "OK", wird den Unterordnern die Aktion angehängt.

Der Pfad bleibt gespeichert, weil als 'property' definiert. Beim nächsten Ausführen wird geprüft, ob das Script noch vorhanden ist. Wenn ja, wird der Pfad angezeigt und man hat wieder die Möglichkeit, ein anderes Script zu wählen. Wenn das Script nicht mehr gefunden werden kann, dann erscheint ein Warnungsdialog und auf "OK" wieder der 'choose file'-Dialog.

Das ist nicht alles:-) Man kann mit einem Doppelklick auf das Icon den aktuellen Pfad abfragen und wenn notwendig auf ein anderes Script ändern.

Durch diese Anwenderfreundlichkeiten &#150; und die notwendigen Tests &#150; ist der Code etwas zu umfangreich geraten, als dass ich ihn hier zu veröffentlichen wage. Ich werde Dir die beiden Droplets privat zustellen.

Wer ebenfalls Interesse daran hat &#150; und sei es nur, um die Technik mit dem Konfigurieren zu studieren &#150; kann die beiden Scripts bei mir verlangen.

Hans Haesler <hsa@ringier.ch>

per applescrict ordnerscripte anhaengen

Anonym
Beiträge gesamt: 22827

11. Nov 2003, 12:02
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
Hallo,
als AppleScript-Laie möchte ich nur mal nachfragen, ob diese Methode - ohne den Finder - auch mit Server-Ordnern funktioniert, oder das darunter liegende Unix keinen ScriptSpaß versteht.

Gruß,
Christoph

per applescrict ordnerscripte anhaengen

Hans Haesler
  
Beiträge gesamt: 5826

11. Nov 2003, 12:48
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
Hallo Christoph,

auf Deine Nachfrage hin habe ich den Testordner auf ein Volume unseres Servers kopiert.
Dann habe ich ihn &#150; tollkühn &#150; auf das Droplet gezogen. Nachdem ich im Dialog das
Script ausgewählt, auf Öffnen geklickt und den Bestätigungs-Dialog verabschiedet hatte,
wurde die Ordneraktion allen Unterordnern zugewiesen. Und Unix hat beifällig genickt &#133;

Übrigens: der Finder wird nur zum Öffnen der Ordner benutzt.

Hans Haesler <hsa@ringier.ch>

per applescrict ordnerscripte anhaengen

Anonym
Beiträge gesamt: 22827

14. Nov 2003, 09:16
Bewertung:

gelesen: 1470

Beitrag als Lesezeichen
hallo hans!

hier kurz das feedback zu den droplets:

- die droplets funktionieren beide einwandfrei.
&#133; und zwar unter 8.6 und 9.22, vom nt server und lokal mit 1.6 und 1.83.
ein erneutes oeffnen und speichern (wg. frz. mac) war nicht unbedingt notwendig.

und das wichtigste: sie sind natuerlich in taeglich einmaligem (sofern ich keine scripts verwechsle;-) gebrauch. das gibt mir die gelegenheit in dieser zeit einen kaffee zu holen! :-)

cu

beste gruesse

hans