Habe mir dank verschiedener Quellen das folgende Script (Droplet) gebastelt. Es dient dazu, Dateinamen mit Erstellungsdatum und Zeit zu ergänzen. Z.B. FPRO4223 Kopie.JPG zu FPRO4223 Kopie___10.6.2019___10'50'24.JPG FPRO4223 Kopie.RAF zu FPRO4223 Kopie___10.6.2019___10'50'24.JPG
Das Script:
Es funktioniert wie gewünscht, wenn ich 1 Datei darauf ziehe. Schon bei der zweiten kommt die Fehlermeldung:
«class docf» "FPRO4223 Kopie.JPG" of «class cfol» "Desktop" of «class cfol» "mini" of «class cfol» "Users" of «class sdsk» of application "Finder" kann nicht in Typ string umgewandelt werden.
Vielleicht kann mir jemand erklären, wo der Haken ist, worüber ich sehr froh wäre.
Dankbare Grüsse Peter
(Dieser Beitrag wurde von Hans Haesler am 12. Jun 2019, 14:10 geändert)
herzlich willkommen im AppleScript-Forum auf HDS! :-)
Der Code sollte anders aufgebaut sein. Ohne den "Finder" einzuspanne.
Bei meinem ersten Versuch bekam ich eine Fehlermeldung, weil 'origName' nicht definiert ist. Nach einer Änderung im Script funktionierte es mit einer Datei. Aber der Ordner, in welchem sich die Testdatei befindet, wurde umbenannt.
Wenn zwei Dateien aufs Droplet gezogen werden, wird die erste umbenannt. Doch dann kommt die Fehlermeldung.
Ich muss gleich weg. Werde aber im Laufe des Tages versuchen, ein funktionerendes Doplet zu erstellen.
Herzlichen Dank für die Lösung des Problems und das Dokumentieren. Sie ist aufwendiger geworden als ich mir vorgestellt habe. Sehr praktisch jetzt ist die Möglichkeit, den Ordner drauf zu ziehen. Das Script funktioniert einwandfrei.
Zusätzlicher Gewinn für mich: es gibt einiges zu lernen und auszuprobieren.
aus Zeitgründen hatte ich die folgenden Erklärungen nicht sofort liefern können.
Die Zeile ...
... ist charakteristisch für ein Droplet. Die Variable kann anders benannt sein. Aber sie wird immer die Liste der Pfade zu den gedroppten Objekten enthalten. Das sind alles Aliasse.
In der Schleife ...
... wird der Variablen 'aObject' das aktuellen Element der Liste zugewiesen.
Dieses wird mit ....
... dem Handler 'processObject()' übergeben, welcher die Objekte prüft.
Mit ...
... wird der Variablen 'curObject' der Pfad als Textkette zugewiesen.
Und jetzt kann das Script den Pfad prüfen. Wenn dieser mit ":" endet, ist es ein Ordner (oder eine App). Sonst eine Datei.
Falls Ordner: Dessen Inhalt wird aufgelistet und zurück an den Handler 'processObject()' gesandt, in welchem die Prüfung stattfindet. Das nennt man "rekursiv".
Falls Datei: Dieser Pfad wird zum Handler 'workFile()' geschickt. In diesem werden die Infos ausgezogen und die Textkette wird zusammengesetzt.
Schliesslich wird durch den "Finder"-Einzeiler-Befehl die Datei umbenannt.
Aus Performance-Gründen ist es ratsam, den "Finder" nur für Befehle aufzubieten, welche er beherrscht. Sonst resultiert ein interner Fehler und der Befehl muss erneut durch die richtige App ausgeführt werden. Das geschieht so häufig, dass Apple diese "Umleitung" offiziell ermöglicht hat.
Es ist auch besser, die "Finder"-Befehle als Einzeiler zu schreiben. Und nicht den ganzen Ablauf in einen "Finder"-Block zu packen.
vielen Dank für die ergänzenden und erhellenden Erklärungen, sie helfen mir wirklich weiter. Es gibt zwar eine ansehnliche Menge Literatur über AppleScript in englischer Sprache, aber wenn's einem deutsch und deutlich gesagt wird, wird es doch klarer. :-)
Mir ist auch aufgefallen, wie schnell das Script arbeitet.
Eine Frage: Kommt es vor, dass das eingefügte Datum wieder entfernt werden muss?
Wie dem auch sei: Folgende Variante des Droplets ermöglicht, den Originalnamen wiederherzustellen. Das Droplet "Datum_weg" ist unten angehängt.
Kurz erklärt: Zu Beginn wird den AppleScript's text item delimiters die Zeichenfolge "___" zugewiesen. Das Script muss bei jedem Dateinamen prüfen, ob dieser "___" enthält. Falls ja, wird der Variablen 'origName' das erste Text-Element des Dateinamens zugewiesen. Das heisst alle Zeichen vom Beginn des alten Dateinamens bis vor den ersten "___"-Trenner. Dann wird der neue (alte) Name zusammengesetzt und die Datei wird umbenannt. Am Schluss werden die AppleScript's text item delimiters zurückgesetzt auf eine leere Textkette.
Ohne die Prüfung auf "___" würde bei einem Dateinamen ohne Datum das erste Text-Element den ganzen Namen inklusive Endung umfassen. Und daran würde die Endung gehängt: "test_01.txt.txt"
beim Testen des "Datum_weg"-Droplets wurde mir bewusst, dass auch im "Datum"-Droplet geprüft werden sollte, ob im aktuellen Dateinamen noch kein Datum eingefügt ist.
Dazu muss mit if not auf das Gegenteil getestet werden:
Deine weiterführenden Überlegungen und Ergänzungen sind interessant. Zwar war es bis jetzt nicht notwendig, das Datum wieder los zu werden, aber die Möglichkeit zu haben, erweitert den Nutzen des Scripts. Und zu sehen, wie das erreicht wird, erweitert meinen Scripter-Horizont. :-)
In dem Zusammenhang spuckt ein Script in meinem Kopf herum, das Folgendes ermöglicht: Beim Abbarten der gedropten Dateien wird in einem Dialog standardmässig der Originalname (neu + Datum) angeboten mit der Möglichkeit den Namen Datei für Datei individuell händisch zu ändern.
Wenn du dazu eine Idee hättest, wäre das großartig. Danke, daß ich deine Kenntnisse nutzen darf.
Deine neue Idee sollte umsetzbar sein. Werde ich im Laufe des Tages versuchen.
Verstehe ich es richtig, dass nur der Originalname zum Ändern angeboten werden soll? Wenn Datum und Uhrzeit unverändert eingefügt werden, wäre das am einfachsten.
vermutlich entspricht schon die folgende Lösung Deinem Wunsch.
Man muss nur diese Zeile an der richtigen Stelle einfügen. Die ergänzte Droplet-Datei ist angehängt.
Mit 'default answer' bekommt man eine Eingabe-Zeile, welche enweder leer ist (durch nachfolgendes "") oder schon Zeichen enthält (wie hier mit 'origName').
Wenn der Name nicht geändert werden soll: Auf den Button "OK" klicken. Zum Abbrechen der Ausführung: Den Button "Abbrechen" betätigen.
Angeboten werden kann der ganze Dateiname, ich würde dann nach Belieben überschreiben. Ich dachte es mir so: Button "Speichern" sichert den neuen Namen und geht zur nächsten Datei, "OK" geht direkt zur nächsten Datei, "Abbrechen" unterbricht die ganze Aktion.
Recht hast du natürlich, Datum und Zeit anzubieten, bringt in diesem Fall keinen praktischen Nutzen (ausser einem optischen, vielleicht).
"Datum_03d.app" ist sehr praktisch, hat nur einen Schönheitsfehler [:-)]: Wenn die Dateien bereits mit Datum und Zeit versehen sind, wird der Dialog zum Namen ändern übersprungen. Wenn du das noch dahingehend ändern könntest, daß das Änderungsangebot immer ersheint, wäre ich glücklich damit – muss aber nicht am Sonntag sein.