Galileo Design < openbook > Galileo Design - Know-how für Kreative.
Know-how für Kreative

Inhaltsverzeichnis
5 Erste Schritte mit dem Terminal
19 Dashboard
21 AppleScript einsetzen
Stichwort

Download:
- ZIP, ca. 1,4 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Das Praxisbuch Mac OS X Tiger von Kai Surendorf
Die Version 10.4 im professionellen Einsatz
Buch: Das Praxisbuch Mac OS X Tiger

Das Praxisbuch Mac OS X Tiger

622 S., 34,90 Euro
Galileo Design
ISBN 978-3-89842-621-3
gp 21 AppleScript einsetzen
  gp 21.1 Erste Schritte
    gp 21.1.1 Objektorientierung
  gp 21.2 Der Skripteditor
    gp 21.2.1 Das Hauptfenster
    gp 21.2.2 Das Skriptmenü
  gp 21.3 Variablen
    gp 21.3.1 Variablen definieren
    gp 21.3.2 Werte auslesen
  gp 21.4 Applikationen ansprechen
  gp 21.5 Schleifen und Bedingungen
    gp 21.5.1 if … then …
    gp 21.5.2 Häufige Fehler
    gp 21.5.3 Textwerte abfragen
    gp 21.5.4 Bedingungen und Blöcke
    gp 21.5.5 Schleifen definieren
    gp 21.5.6 Endlosschleifen und Exit
  gp 21.6 Variablen in Listen
    gp 21.6.1 Listenelemente ansprechen
    gp 21.6.2 Element aus Auswahlmenü
  gp 21.7 Fehler abfangen
  gp 21.8 Funktionen
    gp 21.8.1 Ausführung nur bei Aufruf
    gp 21.8.2 Lokale Variablen übergeben
  gp 21.9 Arbeit mit Texten
    gp 21.9.1 Absätze verarbeiten
    gp 21.9.2 Wörter verarbeiten
    gp 21.9.3 Text formatieren
    gp 21.9.4 Farben zuweisen
  gp 21.10 Arbeit mit Dateien und Daten
    gp 21.10.1 Datei automatisch öffnen
    gp 21.10.2 Datei speichern und schließen
    gp 21.10.3 Datei überschreiben
    gp 21.10.4 Skript-Protokoll erstellen
    gp 21.10.5 Datei-Informationen auslesen
  gp 21.11 Nützliche Beispiele
    gp 21.11.1 Automatisches Backup
    gp 21.11.2 Ordner synchronisieren
    gp 21.11.3 FileMaker und das Adressbuch
  gp 21.12 AppleScript und das Terminal
  gp 21.13 Bildbearbeitung mit Image Events
    gp 21.13.1 Bilder konvertieren
    gp 21.13.2 Thumbnails erzeugen
    gp 21.13.3 Bild drehen und spiegeln
  gp 21.14 Ordneraktionen
    gp 21.14.1 Warnton beim Öffnen von Ordnern
    gp 21.14.2 Zentralen Download-Ordner erstellen
  gp 21.15 Ausführbare Skripten
  gp 21.16 Droplets
  gp 21.17 AppleScript im Netzwerk
  gp 21.18 Ausblick


Galileo Design

21.11 Nützliche Beispiele  downtop

Die folgenden Beispiele sind aus dem Leben vieler Anwender gegriffen und zeigen auf, wie sinnvoll man AppleScript einsetzen kann, um umfangreichere Aufgaben effizient zu automatisieren. Sie können die folgenden Skripten einfach auf Ihrem System selbst anwenden. In den Erklärungen nehmen wir Skript für Skript in seine Bestandteile auseinander, damit Sie nachvollziehen können, was darin genau passiert.


Galileo Design

21.11.1 Automatisches Backup  downtop

Aufgabenstellung ist ein Skript, das einen ausgewählten Ordner in das Verzeichnis Backup auf dem Volume Daten kopiert. Dabei soll das Skript einen Ordner erstellen, dessen Name dem jeweils aktuellen Datum des Backups entspricht:

set Ordner to choose folder 
set Datum to Date string of (current date) 
tell application "Finder" 
    set Ziel to "Daten:Backup:" & Datum 
    if not (exists folder Ziel) then 
    make new folder at "Daten:Backup" 
    set name of folder "Daten:Backup:Neuer Ordner" to Datum 
    end if 
    copy folder Ordner to folder Ziel 
end tell

Listing 21.1 Beispiel für ein Backup-Skript

Dieses Skript fragt zuerst nach dem Verzeichnis, das in den Backup-Ordner kopiert werden soll.

In den Anweisungen an den Finder wird zuerst mit der Variablen Ziel das Verzeichnis definiert, in das die Daten kopiert werden sollen. Hierbei wird die schon feststehende Pfadangabe Daten:Backup mit dem ausgelesenen Datum zu einer Zeichenkette kombiniert. Damit der Ordner korrekt in das Verzeichnis kopiert werden kann, muss dieses zunächst existieren. Umgekehrt würde der Versuch, ein bereits existierendes Verzeichnis zu erstellen, ebenfalls zum Abbruch eines Skriptes führen. Man könnte sich mit der Anweisung try behelfen, indes ist es einfacher, das Verzeichnis auf seine Existenz hin zu prüfen. So es nicht existiert, soll es erstellt werden. Wenn Sie bei einer Bedingung mit der Ausgabe eines Befehls arbeiten möchten, in diesem Fall exists, müssen Sie ihn einklammern. Dann wird ein neuer Ordner erstellt.

Da nun sichergestellt ist, dass das Zielverzeichnis auch wirklich existiert, wird zuletzt der Ausgangsordner dorthin kopiert. Wenn Sie statt mit einem Ordner nur mit einer Datei arbeiten möchten, dann müssen Sie die Angabe folder am Anfang und am Ende des Skriptes einfach in file umwandeln, wobei der Typ folder als Ziel erhalten bleibt.

Datum auslesen
Damit ein Ordner erzeugt werden kann, dessen Name dem aktuellen Datum des Backups entspricht, muss dieses zunächst ausgelesen werden. Da eine vollständige Datumsangabe inklusive Uhrzeit das Format Montag, 1. März 2004 12:49:29 Uhr hat, würde dies zu Problemen führen: Die in der Uhrzeit verwendeten Doppelpunkte würden bei der vorzunehmenden Umbenennung eines Ordners als Trennzeichen zwischen mehreren untergeordneten Ordnern interpretiert werden und zum Abbruch des Skriptes führen. Aus diesem Grund beschränken wir uns in diesem Skript auf den Text-Teil des Datums.

Ordner umbennen
Da der neue Ordner standardmäßig die entsprechende Bezeichnung Neuer Ordner trägt, muss seinem Attribut name noch der Wert der Variablen Datum zugewiesen werden.

Galileo Design

21.11.2 Ordner synchronisieren  downtop

Wenn Sie sowohl mit einem Powerbook als auch mit einem Desktop-Rechner arbeiten, wird es vorkommen, dass Sie den einen oder anderen Ordner zwischen den Rechnern synchronisieren möchten. Es kann dabei recht lästig sein, sich jedes Mal im Finder mit der Listendarstellung das Inhaltsverzeichnis der einzelnen Ordner anzuschauen und dann manuell die geänderten Dateien auf den Desktop-Rechner zu übertragen. Unter anderem laufen Sie dabei Gefahr, Dateien, die auf dem Desktop-Rechner auf dem neuesten Stand sind, ungewollt zu überschreiben. Ein Skript kann Ihnen dabei einige Mühe sparen, denn AppleScript erlaubt es auch, das Änderungsdatum von Dateien einzulesen, zu vergleichen und davon ausgehend weitere Aktionen auszuführen. Mit dem folgenden Skript erhalten Sie eine komfortable Synchronisationsfunktion:

set Quellordner to choose folder with prompt "Welcher Quellordner?" 
set Zielordner to choose folder with prompt "Welcher Zielordner?" 
set Datum to (current date) 
set Quelldateien to list folder Quellordner without invisibles 
set Zieldateien to list folder Zielordner without invisibles 
tell application "Finder" 
    repeat with Datei in Quelldateien 
    set Quelldatei to (Quellordner as string) & Datei 
    set Zieldatei to (Zielordner as string) & Datei 
    if not (Zieldateien contains Datei) then 
    copy file Quelldatei to folder Zielordner 
    else 
    set Quelldatum to modification date in (info for file Quelldatei) 
    set Zieldatum to modification date in (info for file Zieldatei) 
    if Zieldatum comes before Quelldatum then 
    delete file Zieldatei 
    copy file Quelldatei to folder Zielordner 
    end if 
    end if 
    end repeat 
end tell

Listing 21.2 Beispiel für ein Skript, um Ordner zu synchronisieren

Dieses lange Skript sieht auf den ersten Blick komplizierter aus, als es eigentlich ist. Die ersten zwei Schritte bestehen darin, den Quell- und den Zielordner zu erfragen sowie deren Inhalt jeweils in eine eigene Liste einzulesen. Anschließend wird der Finder angesprochen und eine Schleife erzeugt. Diese soll so oft durchlaufen werden, wie die Liste des Ausgangsordners Einträge – ergo Dateien – besitzt.

Der erste Schritt innerhalb der Schleife besteht nun darin, dass die für den jeweiligen Durchlauf aktuellen Dateien konstruiert werden. Wenn Sie den Inhalt eines Verzeichnisses in einer Liste speichern, werden dort nur die Dateinamen hinterlegt, nicht jedoch die Pfadangaben. Um wie in unserem Beispiel das Änderungsdatum einer Datei zu ermitteln, wird diese jedoch benötigt. Mit dem Befehl

set Quelldatei to (Quellordner as string) & Datei

wird eine Pfadangabe eingelesen.

Klammern | Hierbei mag die Klammer und der Zusatz as string überraschen. Der Sinn der Klammern besteht in diesem Fall darin, dass automatisch der Rückgabewert der eingeklammerten Anweisung verwendet werden soll. Das Äquivalent wäre

set Quellordnerstring to Quellordner as string

Sie können sich aber mit der obigen Lösung den Umweg über die zusätzliche Variable sparen. Die Umwandlung, die wir hier vornehmen, ist notwendig, da der mit choose folder ausgewählte Ordner nicht als einfacher Text, sondern als ein Dateiobjekt zur Verfügung steht, das in AppleScript auch als alias bezeichnet wird.

Stehen die Ausgangs- und die vermutliche Zieldatei fest, wird zuerst geprüft, ob es die Zieldatei bereits gibt. Ist dies nicht der Fall, wird die Ausgangsdatei gleich ins Zielverzeichnis kopiert. Wenn bereits eine gleich lautende Datei im Zielverzeichnis existiert, sie also in der Liste der Dateien im Zielordner vorkommt, muss geprüft werden, welche Datei die aktuellere Fassung ist. Mit dem Befehl

set Quelldatum to modification date in (info for file Quelldatei)

wird eine Variable vom Typ date erzeugt, die das Änderungsdatum der Datei beinhaltet. Hierbei wird wieder auf die Methode mit der Klammerung zurückgegriffen. Die Rückgabe des Befehls info for ist eine Liste mit den unterschiedlichsten Einträgen, dementsprechend muss mit dem Aufruf von modification date in gezielt der Wert des Änderungsdatums ausgelesen werden.

Datum vergleichen | Nun gilt es, die Daten zu vergleichen. Wenn das Änderungsdatum der Zieldatei vor dem der Ausgangsdatei liegt, was mit der Anweisung comes before überprüft wird, dann wird die gleichnamige Datei im Zielordner gelöscht und wieder ein Kopiervorgang gestartet.

Unser Skript arbeitet in der oben stehenden Fassung nur in einer Richtung. Um die Ordner in beide Richtungen miteinander abzugleichen, können Sie es ein zweites Mal aufrufen und Ausgangs- und Zielordner vertauschen. Eine Ergänzung könnte auch darin bestehen, dass Sie sowohl prüfen, ob der Inhalt des Zielverzeichnisses dem des Ausgangsverzeichnisses entspricht, als auch, ob die Zieldatei jünger als die Ausgangsdatei ist, und dann Letztere löschen.


Galileo Design

21.11.3 FileMaker und das Adressbuch  toptop

Fast alle von Apple mitgelieferten Applikationen können über AppleScript angesprochen werden. So auch das Adressbuch, bei dem AppleScript Zugriff auf alle darin gespeicherten Kontakte und Adressen erhalten kann. Da das Adressbuch von vielen Programmen, wie etwa Mail, verwendet wird, wäre eine Interaktion mit einer Datenbank nützlich. Für unser Beispiel setzen wir den Fall, dass wir all unsere Adressen in der Datenbank FileMaker speichern und einige der dort gespeicherten Datensätze automatisch in das Adressbuch von Mac OS X übertragen möchten. Mit einem Skript möchten wir bewirken, dass die Adressbasis von FileMaker mit Hilfe des Adressbuchs auch anderen Programmen zur Verfügung gestellt wird.

Das hier vorgestellte Beispiel geht davon aus, dass die Einträge der FileMaker-Datenbank in eine Gruppe des Adressbuchs einsortiert werden sollen:

tell application "Address Book" 
    if not (exists group "FileMaker") then 
    make new group with properties {name:"FileMaker"} 
    end if 
end tell 
tell application "FileMaker Pro" 
    open "Brain:Users:kai:Desktop:Adressen.fp5" 
    set Anzahl to count records 
    go to record 1 
    repeat with Zaehler from 1 to Anzahl 
    set Vorname to cell "Vorname" of record Zaehler 
    set Nachname to cell "Nachname" of record Zaehler 
    set Strasse to cell "Straße" of record Zaehler 
    set PLZ to cell "PLZ" of record Zaehler 
    set Ort to cell "Ort" of record Zaehler 
    tell application "Address Book" 
    set Eintrag to (make new person) 
    add Eintrag to group "Filemaker" 
    tell Eintrag 
    set last name to Nachname 
    set first name to Vorname 
    make new address with properties {street:Strasse, zip:PLZ, city:Ort} 
    end tell 
    end tell 
    end repeat 
end tell

In diesem Skript wird als erstes dem Adressbuch mitgeteilt, dass eine neue Gruppe FileMaker erstellt werden soll, sofern diese noch nicht existiert. Die Anweisung with properties {name:"FileMaker"} gibt der gegebenenfalls zu erstellenden Gruppe gleich den Namen FileMaker, da schon beim Erstellen auf eine der möglichen Eigenschaften Bezug genommen wird.

Speichern mit ID
Intern speichert und verwaltet das Programm die Einträge mit eigenen IDs wie person id "DAC54053 – 6C3D-11D8 – 8FAE-000502E1B154:ABPerson". Mit Hilfe von set wird die ID der neu erstellten Person gleich in einer Variablen gespeichert und diese anschließend der Gruppe FileMaker hinzugefügt.

Als nächstes erteilen wir dem Programm FileMaker, das mit seinem vollständigen Namen FileMaker Pro angesprochen werden muss, den Befehl, die Adressdatei zu öffnen.

Mit count records wird die Anzahl der in der Datenbank vorhandenen Datensätze ermittelt und mit go to record 1 zum ersten Datensatz gesprungen. Die Schleife wird so oft durchlaufen, wie Einträge vorhanden sind. Das Skript nimmt an, dass die Datenfelder (cell) innerhalb der Datenbank die Bezeichnungen Vorname, Nachname, Straße, PLZ und Ort tragen. Diese werden ausgelesen und in Variablen des Skripts gespeichert. Der Zusatz of record Zaehler stellt sicher, dass jeweils alle Datensätze nacheinander durchlaufen werden und nicht einfach beim ersten Halt gemacht wird.

Sind alle benötigten Variablen ausgelesen, gilt es, sie in das Adressbuch zu importieren. Zuerst muss dafür mit set Eintrag to (make new person) eine neue Person erstellt werden.

Weitere FileMaker-Felder
Das so programmierte Skript arbeitet nun die FileMaker-Datenbank ab und fügt nacheinander alle vorhandenen Datensätze in das Adressbuch ein. Wenn in der FileMaker-Datenbank noch weitere Felder wie zum Beispiel eine Fax-Nummer definiert wurden, so müssen Sie das Skript um die entsprechenden Felder und Properties ergänzen.

Die Zuweisung des Vor- und Nachnamens folgt dem üblichen Schema. Mit make new address with properties {street:Strasse, zip:PLZ, city:Ort} wird der Eintrag, der die Adresse darstellt, erzeugt. Beim Adressbuch ist es möglich, dass ein Eintrag oder eine Person über mehrere Adressen verfügt. Bei den Adressdaten handelt es sich nicht um die Eigenschaft name, sondern um ein der Person zugehöriges Objekt. Selbstverständlich wäre es auch möglich, zuerst nur das neue Adressobjekt zu erzeugen und dann anschließend mehrmals mit set die einzelnen Daten wie Straße und Ort einzufügen.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Das Praxisbuch Mac OS X Tiger






 Das Praxisbuch
 Mac OS X Tiger

Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Das Praxisbuch Mac OS X Leopard






 Das Praxisbuch
 Mac OS X Leopard


Zum Katalog: Mac OS X 10.5 Leopard






 Mac OS X 10.5
 Leopard


Zum Katalog: iLife ’08: iPhoto, iMovie, iDVD, GarageBand, iTunes und iWeb






 iLife ’08:
 iPhoto, iMovie, iDVD,
 GarageBand, iTunes
 und iWeb


Zum Katalog: iLife ’08: iPhoto, iMovie, iDVD, GarageBand, iWeb und iTunes - Videotraining






 iLife ’08:
 iPhoto, iMovie, iDVD,
 GarageBand, iWeb und
 iTunes - Videotraining


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Design]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de