Hallo Forum, ich bearbeite gerade mein erstes Applescript und bitte um Nachsicht wenn meine Fragen noch anfängerhaft sind.
Ich möchte Musiktitel in zu erstellende Ordner legen. Die Titel haben immer folgende Struktur:
Celtic Woman - May It Be.mp3 Everlast - This Kind of Lonely.mp3 Bryan Adams - Summer of '69.mp3 Everlast - Maybe.mp3 u.s.w.
Es sollten nun die Ordner Celtic Woman, Bryan Adams und Everlast angelegt und die Dateien in die jeweiligen Ordner verschoben werden. Folgendes Script habe ich bisher zusammengestellt:
tell application "Finder" set theFolder to choose folder --Ordner mit den Dateien auswählen set allFiles to every item of theFolder --alle Dateien im Ordner abfragen repeat with theFile in allFiles set theName to do shell script "name=\"" & name of theFile & "\"; echo ${name%.*}" --Den Namen der Datei ohne Endung abfragen try set newFolder to make new folder at theFolder with properties {name:theName} --neuen Ordner erstellen end try move theFile to newFolder --Datei verschieben end repeat display dialog "Fertig!" end tell
Dabei habe ich noch zwei ungelöste Probleme. Zum einen wird der Ordnername bisher aus dem ganzen Dateinamen gebildet und nicht nur aus dem Interpreten, und zum zweiten müsste ein bereits angelegter Ordner erkannt und nicht doppelt angelegt werden.
herzlich willkommen im AppleScript-Forum auf HDS! :-)
Nun, für ein erstes AppleScript ist das schon eine happige Aufgabe. Gratulation zu Deinem Versuch.
Ein paar Bemerkungen: – 'choose folder' und 'display dialog' sind Befehle der "StandardAdditions" und nicht des "Finders". Deshalb diese beiden Zeilen ausserhalb des tell-Finder-Blocks verschieben. – Zum Auflisten der Dateien nicht 'item' benutzen, sondern 'file'. Sonst werden bestehende Ordner auch erfasst. – Zum Ausziehen des zukünftigen Ordnernamens die 'AppleScript's text item delimiters' einsetzen. Wenn diese als " - " bestimmt werden, kann das erste Text-Element herausgelöst und einer Variablen zugewiesen werden. – Die Prüfung 'if not (exists folder folName of folder theFolder)' stellt sicher, dass bei bestehendem Ordner nicht versucht wird, einen zweiten anzulegen. – Wenn der neue Ordner erstellt ist, wird die Datei hineinverschoben. – Diese Aktion ist in einem 'try'-Wickel, um zu vermeiden, dass es eine Fehlermeldung absetzt, wenn eine gleichnamige Datei schon vorhanden ist. – Wenn der Ordner schon existiert, wird die Datei in diesen verschoben.
Hier funktioniert es wie erwartet. Hoffentlich bei Dir auch.
Wow Hans, funktioniert einwandfrei! Herzlichen Dank! Das erspart mir eine Menge an Arbeit.
Bei meiner Recherche war ich auch auf delimiters gestoßen, aber die Syntax war mir natürlich nicht geläufig. Ich komme mehr von Excel und VBA (als Hobby).
Gibt es auch noch die Möglichkeit das Ganze als Droplet zu speichern? Bisher habe eine App erstellt, aber irgendwo etwas von "on open" gelesen, aber nicht umsetzen können. Wäre aber nicht so wichtig, ich bin mit diesem Ergebnis schon vollauf zufrieden!
Ein Droplet? Das wollte ich Dir vorschlagen. Bitte, hier:
Dieses Script – im Format "Programm" gespeichert –, ist gezippt unten angehängt.
Zur Ausführung: Den Ordner, welcher die Dateien enthält, auf das Icon des Droplets ziehen. Der Ordner kann schon benannte Ordner enthalten. Dateien werden im entsprechenden Ordner versorgt. Oder in einem neuen, welcher angelegt wird.