Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03111.jsonl.gz/1796

Ich möchte Dateien nach einem gewissen Schema umbenennen. Es ist eine komplexe Aufgabe die mit Hilfe einer Excel-Tabelle und AppleScript gelöst werden soll. Leider bin ich blutiger Anfänger bei AppleScript und benötige nun Hilfe.
Mir liegen tausende Dateien vor die aus Artikelnummern bestehen + fortlaufender Nummer.
Beispiel: TB1234_0 1.psd (_0 2, _0 3...) oder TB567_0 1.psd
Die Artikelnummern können aus 5 oder 6 Zeichen bestehen. Jedenfalls steht hinter jeder Artikelnummer ein "_" was mir hilft nur die Artikikelnummern ohne fortlaufende Nummern auszulesen.
Die Artikelnummern benötige ich um nach ihnen in einer Excel-Tabelle zu suchen. Meine Excel-Tabelle ist wie folgt aufgebaut:
Eine Artikelnummer hat mehrere Farben, deshalb steht in der Excel-Tabelle oft die gleiche Artikelnummer in Spalte A untereinander. Daneben in Spalte B die unterschiedlichen Farbcodes für die vorhanden Farben in Spalte C.
Bspw. hat blau den Farbcode 00007, gelb hat den Farbcode 00220, ... Die Farbcodes bestehen immer aus 5 Zeichen.
Verständlich bis hierher? Ich hoffe doch ;) Ich schreibe lieber mal ausführlich, da es doch sehr komplex ist.
Ziel ist es einen Dateinamen zu erhalten der so aufgebaut ist:
Also soll einfach hinter dem Dateinamen der passende Farbcode + Farbe zu der von mir eingegeben Farbe platziert werden. Das Prozent-Zeichen zwischen Farbcode und Farbname muss vorhanden sein.
Ich stelle mir das so vor:
• Im Finder-Fenster wähle ich alle Dateien(Artikel) aus die gelb sind (das können viele Unterschiedliche Artikelnummern sein) • Die ausgewählten Dateien droppe ich auf ein Icon um das Script zu starten • Ein Dialog-Fenster erscheint in dem ich den Farbnamen eingeben muss (in diesem Beispiel gelb) • Nun sucht das Script in Spalte A der geöffneten Excel-Tabelle nach den Artikelnummern der gedroppten Dateien, schaut bei den gefunden Artikelnummern in Spalte C nach ob es gelb(den von mir eingegeben Begriff) gibt, wenn es gelb gibt, dann soll es en Spalte B den Farbcode extrahieren • Jetzt soll Finder mit den vorhandenen Informationen die Dateien nach o.g. Schema umbenennen
Wichtig zu erwähnen ist, dass die Farben nicht immer den gleichen Farbcode haben. Gelb ist nicht immer 00220. Der Farbcode ist also auch abhängig von der Artikelnummer. Bei Artikelnummer TB1234 kann gelb den Farbcode 00220 haben, bei TB567 aber 01031.
Hier ist der Code den ich mir bisher zurechtgebastelt habe (Dateiumbenennung noch nicht inbegriffen):
Ich komme leider nicht weiter, da der Vorgang, die Informationen aus Spalte B(column 2) in Spalte D(column 4)zu übertragen, immer nur in der ersten Zeile der gefunden Artikelnummer geschieht. Das liegt wohl an dem first row index Eintrag, kann das aber irgendwie nicht umgehen.
Den Code um die Dateien anhand der vorhandenen Informationen umzubenennen poste ich jetzt mal nicht, das würde den Rahmen sprengen. Der ist aber auf jeden Fall richtig messy und auch hier könnte ich Hilfe gebrauchen
Kann mir jemand Helfen? Wie bekomme ich es hin, dass das Script den Farbcode aus der Zeile mit dem eingegebenen Farbnamen ausliest und nicht aus der ersten Zeile?
voller Stolz präsentiere ich euch nun mein finales Script. Ich habe es tatsächlich durch zeitintensives ausprobieren(lernen) hinbekommen.
Wie gesagt habe ich keine Erfahrungen mit Programmiersprachen aber für mich sieht das wie ein solides Script aus und es funktioniert:
Wie die Exceltabelle aussieht habe ich ja bereits beschrieben. Ich habe jetzt eine neue Exceltabelle, darum stehen die Farbnamen nun in Spalte F und nicht mehr wie anfangs beschrieben in Spalte C.
Aber hier noch mal zum Verständnis:
Artikelnummern in Spalte A sehen so aus: TB123, TB567, TB1234, TB5678... Farbcodes in Spalte B sehen so aus: 00225, 00007, 01321... Farbnamen in Spalte C sehen so aus: black, white, chrome-yellow, black-white-chrome-yellow... (Farbkombinationen gibt es natürlich auch)
Ich bin noch am überlegen das Script etwas umzubauen um nicht andauernd in einem Dialogfenster den Farbnamen ohne Rechtschreibfehler eingeben zu müssen. Etwas nervig wenn man Namen wie "black-white-chrome-yellow" eingeben muss. Es gibt noch längere Namen!
Am liebsten wäre mir ein sich öffnendes Dialogfenster mit einer Liste aller vorhanden Farben zu den gedroppten Dateien(Artikelnummern), aus der ich dann die gewünschte Farbe mit einem klick auswählen kann. Ich weiß nur nicht wie das in meinem Script funktionieren soll. Wenn jemand einen hilfreichen Tip hat, sehr gerne ;)
Vielleicht hat jemand eine ähnliche Aufgabe zu bewältigen, hier ist das Script dazu. Bitteschön.
Anmerkungen zu meinem Script sind herzlich willkomen.
Allerdings habe ich das Problem, dass ich in meinem Script keine Liste mit den Farbnamen zu den gefundenen Artikelnummern habe und ich auch nicht weiß wie ich eine erstellen kann.
Mein Script sucht in Spalte A nach der Artikelnummer, sobald die Artikelnummer gefunden wurde, sucht das Script ja Zeile für Zeile ab der gefundenen Artikelnummer (ab dem first row index) ab und sobald er in Spalte F den von mir definierten Farbnamen findet, schaut das Script nach dem dazugehörigen Farbcode in Spalte B.
Es wird in keinem Moment eine Liste erstellt die ich mir anzeigen lassen könnte. Ich bin da etwas ratlos ehrlich gesagt.
Vielleicht liest hier ja jemand mit der mir einen tollen Tipp geben kann. Ich wäre euch jedenfalls sehr dankbar dafür.
okay, das wird dann also wohl nicht möglich sein. In der Exel Liste sind tausende Farben, die kann ich alle händisch nicht in eine Liste einfügen.
Außerdem möchte ich in der Liste nur die Farben angezeigt bekommen, die auch zu den Artikelnummern exisiteren. Eine Liste aller vorhanden Farben macht keinen Sinn, da ich mich da totsuchen würde (über tausend Einträge).
Nun hab eich aber feststellen müssen, dass das Script zwar funktioniert, aber nur von Lokal aus.
Sobald ich versuche eine Datei, die auf einem Server liegt, mit dem Script zu bearbeiten, erscheint folgende Fehlermeldung:
"alias "Servername:Ordner:Dateiname.jpg" of Application "Finder" kann nicht als ""neuer Dateiname.jpg"" gesetzt werden. (-10006)
Müsste evtl. vor dem Servernamen noch die IP-Adresse stehen? Falls ja, wie kommt dann diese Information dahin?
Wenn ich das richtig verstehe, dann resultiert das ja aus "on open Dropped_Files" bzw. aus all_files bei "set all_files to Dropped_Files as list".
Kann es sein, dass das Script den Pfad zur Datei nicht richtig versteht weil einfach die IP-Adresse fehlt?
Das sind unklare Aussagen. Die Farbnamen, welche den Artikelnummern zugeordnet sind, sollten sich doch auswählen und kopieren lassen. Dann kann man sie durch Suchen/Ersetzen in eine Liste verwandeln.
Allerdings: Sobald eine gewisse Anzahl überschritten ist, wird eine Anzeige per choose from list unhandlich.
Besser wäre, die Liste mit einem InDesign-Dialog anzuzeigen. Hast du eventuell InDesign zur Hand?
Abgesehen davon: Hast du wirklich alle Farben, welche Du eintippen musst, im Kopf? Oder gibt es eine Auflistung?
***** Zu Prüfen Deines Server-Zugriff-Problems habe ich eine stark vereinfachte Version des Droplets erstellt:
Wenn sich die gedroppte Datei in einem lokalen Ordner befindet, wird sie wie erwartet umbenannt. Ebenfalls keine Fehlermeldung mit einer Datei, die sich au einem Server befindet, auf welchen ich mich per VPN eingeloggt habe.
Was geschieht bei Dir, wenn Du meine Droplet-Version benutzest? Klappt es auch mit dem Server? Falls nicht, dann hast Du sehr wahrscheinlich ein Rechte-Problem.
du hast den Haken an der Sache richtig erkannt. Ich habe natürlich nicht alle Farbnamen im Kopf und muss in einem System nachschauen um welche Farbe es sich handeln könnte. Das ist alles andere als optimal.
Darum wäre eine Liste aus der ich auswählen kann das schlauste. Das Problem mit choose from list verstehe ich natürlich. InDesign habe ich installiert und könnte wahrscheinlich abhilfe schaffen aber ich muss ehrlich sagen, dass ich nicht weiß wie so etwas geht.
Dank deines Tipps habe ich folgendes dem Script hinzugefügt (gar nicht mal so kompliziert):
Genau das wäre das was ich brauche, allerdings weiß ich nicht was ich in meinem Script ändern muss um nur [b]eine Liste der Farbnamen zu erhalten, welche den Artikelnummern zugeordnet sind.
Momentan erscheint zu jeder gefunden Farbe ein neues Fenster.
Gibt es eine Möglichkeit wie ich die Informationen sammel und in [b]einem Fenster anzeigen lasse?
------------------
Zu meinem Server-Problem:
Dein kleines Script funktioniert ohne Probleme. Da erscheint mir keine Fehlermeldung. Also scheint es als hätte es nichts mit Zugriffsrechten zu tun.
Ich sehe jetzt aber rein von der Logik her nicht wirklich einen Unterschied zu meinem Code:
Wenn ich nun meinen Code zum umbenennen durch deinen in meinem Script ersetze, dann erscheint die gleiche Fehlermeldung.
Liegt der Fehler also dann an andere Stelle? Ich kann es mir irgendwie nicht erklären.
Für eine kleine Hilfestellung wäre ich sehr dankbar.
ich konnte mich gestern erst abends mit der Aufgabe beschäftigen. Und musste mich herantasten, um eine effiziente Lösung zu finden.
Mit Deiner Zeile ...
... ist das Ergebnis 17636. Obwohl in der Datei "nur" 3376 Zeilen belegt sind.
Mit diesem Befehl ...
... ist das Ergebnis 3376. Die zu holende Tabelle wird viel handlicher sein.
Ich habe mit beiden Beispiel-Namen, welche Du in der Erklärung genannt hattest, einen Versuch gemacht. Sowohl "TB1897" als auch "TB1898" kommt je zwei Mal vor. Bei der ersten sind die Farben "olive" und "black" eingetragen. Bei der zweiten sind es "grey" und "black".
Im Dialog werden also drei Namen angeboten: "black" "grey" "olive".
Wenn Du nun "black" wählst, dann ist es okay, denn diese Farbe ist bei beiden Artikelnummern vorhanden. Aber ein "grey" ist nur bei der zweiten Artikelnummer eingetragen.
Frage 1: Werden dann dennoch beide Datei-Namen mit "00111%grey" ergänzt? Frage 2: Wieviele Dateien droppst Du pro Arbeitsgang?
Zudem ist noch nicht klar, wie das Script bei "nicht gleichen Farbcodes" agieren soll. Es muss ja vor dem Umbenennen einer Datei deren Artikelnummer holen, dann nachschauen, wie der Code der gewählten Farbe ist. "So far, so good"? Eher kompliziert ...
Aber: Was tun, wenn z.B. "grey" nicht vorhanden ist?
Hierzu muss ich sagen, dass ich ja unabhängig von der Artikelnummer immer die gleichen Farben nach Sicht auswähle.
Somit müsste ja die von mir gesuchte Farbe auf jeden Fall im Dialog erscheinen.
Momentan ist mein Script noch so aufgebaut, dass ich die Farbnamen eingeben muss. In diesem Fall "black".
Das Script schaut bei der TB1897 nach ob es black gibt, wenn gefunden, schaut er in der anderen Spalte nach dem Farbcode und benennt mir alle Dateien der TB1897 um, dann schaut er bei der TB1898 nach ob es black gibt, in diesem Fall findet er auch black, schaut nach dem Farbcode und benennt mir alle Dateien der TB1898 um.
Wenn ich jetzt grey auswähle bzw. eintippe, dann findet er bei der TB1897 nichts, dann werden die Dateien mit dieser Artikelnummer auch nicht umbenannt. Das Script geht weiter zur nächsten Artikelnummer und schaut dort ob es grey gibt, wenn gefunden, werden die Dateien umbenannt.
Ich muss am Ende, wenn der Arbeitsablauf abgeschlossen ist, nur mal schnell durch den Ordner mit den Dateien scrollen und sichten, ob alle ausgewählten Dateien umbenannt wurden. In diesem Beispiel würde ich feststellen, dass die Dateien mit der Artikelnummer TB1898 in grey umbenannt wurden, die Dateien mit der Artikelnummer TB1897 aber nicht.
Das ist sehr unterschiedlich. Aber im Schnitt würde ich sagen, sind es 50 Dateien. 50 Dateien heisst jetzt aber nicht automatisch 50 Artikelnummern. Das würden eher so 10 Artikelnummern sein.
Bisher funktioniert das Script mit "nicht gleichen Farbcodes". Bleiben wir mal bei meinen Beispiel-Artikelnummern. Änder doch einfach mal bei der TB1898 den Farbcode von black in eine andere Zahl. Änder 00007 zu 77777 und führe mein Script so aus wie es ist.
Dateinamen der Artikel sehen dann so aus:
TB1897_0 1-00007%black.jpg
TB1898_0 3-77777%black.jpg
Das funktioniert also schon mal.
Und so würden die Dateien im Ordner aussehen, wenn grey ausgewählt würde:
TB1897_0 1.jpg
TB1898_0 3-00111%grey.jpg
Wie gesagt würde ich beim durchscrollen durch den Ordner sehen, dass das Script die Dateien mit der Artikelnummer TB1897 nicht umbenannt hätte. Das zeigt mir, dass TB1897 doch nicht die Farbe grey hat. Diese Dateien würde ich einfach noch mal droppen und in der Liste würde ich dann sehen, dass die Artikel nicht in grey exisitieren, sondern in bspw. "dark-grey" (ja ich weiss dass der Artikel nur black und olive hat, aber stellen wir uns einfach mal anstatt olive "dark-grey" vor. Mein Fehler, also wähle ich dark-grey aus und das Problem ist erledigt. Wie gesagt wähle ich die Farben nach Sicht aus, da kann ich schon mal denken, dass ein Artikel grey ist, in Wirklichkeit aber dark-grey ist. Oder der Artikel ist gar nicht black, sondern black-black.
Jedenfalls passiert nichts mit den Dataien, wenn nicht die richtige Farbe gefunden wurde.
okay, wenn es die gewählte Farbe nicht gibt, dann wird nicht umbenannt.
Ich werde nun mal eine Reihe von Dateien vorbereiten, welche ich zum Testen verwenden kann. Wann die erste Version bereit sein wird, ist noch ungewiss, weil ich erneut einen guten Teil des Nachmittags auswärts sein werde.
***** Doch hier schon mal eine Vereinfachung ... Beim Speichern der Farbcodes mit ...
... gehen ja die führenden Nullen verloren. Und müssen umständlich wieder eingefügt werden:
Letzteres kann vereinfacht werden. Angenommen, der Wert von 'that_cell' ist "23":
Das Ergebnis wird immer auf 5 Stellen getrimmt: "00023"
Es geht aber noch einfacher. :-) Mit 'string value' bleiben die führenden Nullen erhalten:
heute ist wieder allerlei Unvorhergesehenes dazwischengekommen. Das Script ist noch nicht fertig. Ich habe Dir einen Link zum Herunterladen der Betaversion 04 geschickt.
Nach dem Droppen der Dateien sollte ein Dialog die Farben zur Auswahl anbieten. Einen der angezeigten Namen wählen und auf "OK" klicken. Ein Dialog meldet den gewählten Namen. Würdest Du bitte prüfen, ob das bei Dir auch funktioniert.
Im Laufe des Donnerstags werde ich versuchen, diese erste Version fertigzustellen.
Sortierte Farbnamen macht es auf jeden Fall übersichtlicher und einfacher zum auswählen.
Ich bin wirklich gespannt wie sich das Script in der Praxis mit Dateien auf dem Server verhält. Mehr dazu dann morgen ;) Ich werde berichten! Aber schon mal gut, dass das ohne Probleme bei dir funktioniert.
bitte sehr. Super, dass es jetzt auch mit Dateien auf dem Server klappt.
Dein Wunsch ist mein Befehl :-). Der Code ist am Schluss dieses Beitrages eingefügt.
Das angehängte Archiv "Testdateien.zip" enthält: – den Ordner "Bilddateien"; – das gebrauchsfertige Droplet "DateienUmbenennen_02d.app"; – die Excel-Datei "Farbcodes.xlsx".
Es geht um Kleidungsstücke, deren Definition per Artikelnummer, Farbname und Farbcode. Die 16 Test-Bilder enthalten je nur ein kleines, farbiges Quadrat (nicht die hübschen Damen der Originale ;-). In der Excel-Datei ist der Inhalt der Spalten C bis E entfernt (Datenschutz). Zudem werden sie nicht benötigt.
Ausführung: – Das Exceldokument öffnen; – gleichfarbige Dateien auf das Droplet ziehen; – im sich öffnenden Dialog einen Farbnamen wählen; – mit "OK" bestätigen.
Hinweise: Das Script macht eine Schleife durch die Dateien, prüft, ob die gewählte Farbe für die aktuelle Artikelnummer vorhanden ist. Falls ja, holt es den zugehörigen Farbcode und ändert den Namen der Datei nach der vorgegebenen Namenskonvention.
Ist die Datei nicht im Excel-Dokument aufgeführt, wird ihr eine rote Etikette verpasst.
Und wenn die gewählte Farbe für die aktuelle Artikelnummer nicht vorhanden ist, wird eine blaue Etikette zugewiesen.
Die Nummer der ersten Datei ("TA1234_0 16.jpg") ist nicht im Excel-Dokument enthalten. Damit sie eingefärbt wird, muss sie mit mindestens einer zweiten Datei gedroppt werden.
Am sichersten ist, Dateien mit identischer Nummer zu wählen.
Denn: Wenn man "TB1897" und "TB1898" gleichzeitig droppt, kommt man nur mit "black" ungeschoren davon. Weil "grey" oder "olive" nicht für beide Artikelnummern erhältlich sind.
zu aller erst, habe ich eine allgemeine Verständnisfrage.
Du verwendest wiederholt Befehle wie:
wofür stehen denn die Buchstaben? In meiner Vorstellung steht n für number, i für index, c für ???
Stimmt das irgendwie? Also haben die Buchstaben irgendeine Bedeutung? Und wenn ja, sind die Buchstaben abhängig vom Inhalt der Liste?
In einer Zeile steht repeat with n from 2. Dem kann ich irgendwie nicht folgen. Warum denn nicht from 1?
Dann hast du folgende Zeile platziert:
Ist es denn notwendig die Anzahl der Elemente zu zählen? Oder dient das nur dazu, sich die Anzahl anzeigen zu lassen wenn man möchte?
Was genau bedeuten denn diese Zeilen?
Das findet ja weiter unten im Script noch Verwendung, allerdings werde ich nicht schlau daraus. Könntest du mir das noch bitte erklären? Ich verstehe in diesen Zeilen
eigentlich nur: set noCode to 0 + 1
Wenn ich das mit noCode und noMatch mal verstanden habe, dann werde ich auch schlau aus den nProb Zeilen.
Beim Handler hörts komplett auf. Ich nehme das einfach mal so hin, dass diese Zeilen die Liste sortieren. Das musst du mir auch nicht erklären. Irgendwann werde ich das schon verstehen. Man lernt nie aus ;)
Wäre aber super wenn du mir ein paar Antworten auf meine Fragen geben könntest.
Ich danke dir schon mal und vielen Dank noch mal für deine tolle Version des Scripts! Ich war begeistert zu sehen wie es unter Realbedingung läuft. Schnell und zuverlässig.
***** das n in 'repeat with n from 1 to nFiles' ist die Zählervariable.
Die Bedeutung von n kann ein Kürzel für number sein. Bei i wäre es iteration (= lat. "iterare" = "wiederholen").
Das i sollte im Forum vermieden werden, weil [i] der Code zum Kursivstellen ist. Jetzt scheint es repariert zu sein, aber eine Zeitlang war im geposteten Script das [i] verschwunden und sämtliche folgende Zeichen waren kursiv.
Der Variablen-Name kann aber auch aus mehreren Zeichen bestehen: 'repeat with tony from 1 to nFiles' :-)
Die Ein-Zeichen-Benennung stammt aus der Ur-Zeit, als ein Script nicht mehr als 32'000 Zeichen umfassen durfte. Das lernte einen, sparsam zu sein ... Bei ein paar Scripts musste ich auf sämtliches Kommentieren verzichten.
*****
Das Script beginnt mit Reihe zwei, weil in der ersten Reihe Worte wie "Artikelnummer", "Farbcode" usw. stehen.
*****
Als ich mit dem Entwickeln von AppleScripts begann, wurde einem empfohlen, die Anzahl Elemente vorher, ausserhalb der Schleife zu zählen. Damit dieser Wert nicht ständig, bei jedem Umgang geholt werden muss. Ich konnte damals keine Bremswirkung feststellen und habe den Rat nicht befolgt.
Aber bei einem JavaScript wird die Ausführung beschleunigt. Deshalb übernahm ich dieses Vorgehen auch für AppleScript. Schon nur, dass die Startzeile der Schleife "sauberer" aussieht.
Beim vorliegenden Droplet wird 'nFiles' bei der erneuten Schleife durch die gedroppten Dateien nochmals verwendet.
*****
Diese Zeilen machen genau das, was der Kommentar darüber sagt. Damit der Wert einer Variablen im Script inkrementiert werden kann, muss ihr vorher ein Wert zugewiesen werden.
Deaktiviere mal diese zwei Zeilen (# davorsetzen oder --). Dann kommt bei der Ausführung prompt eine Fehlermeldung.
So ist es. Aber wenn die Null so eingesetzt wird, ist der Wert am Schluss nicht grösser als eins. Auch wenn z.B. vier Dateien nicht umbenannt wurden.
*****
Im Oktober 2004 hatte Martin Fischer eine Lösung von mir so kommentiert:
Meine Antwort damals:
Bei der Turbo-Version ist zu Beginn des Handlers ein Script-Objekt definiert. Dessen Einsatz sorgt für viel mehr Geschwindigkeit.
*****
Bitte sehr. Ich hoffe, dass es sich weiterhin bewähren wird. Doch wie immer gilt: Einsatz auf eigene Gefahr! Am besten immer vorher mindestens ein Backup der Dateien anlegen.
dank deiner Erklärungen wird mir nun so einiges klar.
Mir war nicht bewusst, dass ich irgendeine Zählervariable verwenden kann, ich dachte die Buchstaben hätten eine Bedeutung, abhängig vom Inhalt.
---- Jetzt machts auch klick bei 'repeat with n from 2'. An die Informationen in der ersten Zeile hatte ich nicht gedacht.
Ich hoffe ich kann daraus lernen und meine zukünftigen Scripts einfacher bzw. schlauer gestalten.
Auf jeden Fall ist AppleScript ein Helferlein den man nicht außer acht lassen sollte. AS kann in jedem Bereich zum Einsatz kommen und ich freue mich auf weitere Automatismen um meine Prozesse zu optimieren.
Vielen Dank für deine schnelle und kompetente Unterstützung.
Rechts oben sind acht Links. Der vierte ist "AppleScript-Bücher". Rechts Mitte: Ein Link für das ebook "AppleScript für absolute Starter" Rechts unten findest Du den Workshop (Themen "Dialoge", "Variablen" usw).