ich habe mir weniger durch Wissen als durch ein paar geniale Antworten hier im Forum ein Skript gebastelt (s. Bild), um die Tags WORK und PART sowie MOVEMENTNAME mit Leben zu füllen, scheitere aber am Finale.
Im Prinzip sollen bei allen Titeln des Genres "Klassik" (und nur da) der Text vor einem Doppelpunkt in den Tag WORK und nach einem Doppelpunkt in den Tag PART geschrieben werden. Anschließend soll der Tag PART in den Tag MOVEMENTNAME kopiert werden.
Folgende Probleme sollen gelöst werden. Es sollen nur Dateien mit dem Genre "Klassik" bearbeitet werden und es sollen alle Dateien mit mehr als einem Doppelpunkt und auch alle ohne Doppelpunkt nicht angerührt werden bzw. bei der Bearbeitung übersprungen werden. Wie kann ich das lösen?
Die grösste Sicherheit erzielst Du, wenn Du nach diesen Stücken zuerst filterst.
Also F3 drücken und nach den gewünschten Kombinationen suchen.
z.B. mit GENRE IS Klassik
Nur diese wählst Du dann aus und führst Deine Aktionen aus.
Leider verstehe ich nicht, was Du mit
meinst. In welchem Tag sollen keine Doppelpunkte stehen?
Diesen Filter für "Klassik" und ":" kann ich mir nicht in meine Befehlsabfolge (s. Bild) einbauen?
Hier mal ein Beispiel zum Verständnis anhand eines Titels:
Oboe Concerto in C major: I. Allegro con brio - attacca
Im Tag WORK soll "Oboe Concerto in C major" stehen.
Im Tag PART und MOVEMENTNAME soll "I. Allegro con brio - attacca" stehen.
Das klappt prima mit meinem Skript (s. Bild) nur soll das eben nur mit dem Genre "Klassik" und nur bei Titelnamen mit genau einem (!) Doppelpunkt passieren, da ansonsten Käse rauskommen würde.
Die Herausforderung ist, dass ich dann ca. 30000 Titel (automatisiert) zu bearbeiten habe.
Da dann auch wirklich alle 30.000 Titel geöffnet und geschrieben werden, ggf. mit "nichts" ist ein Filter absolut sinnvoll. Das geht dann nämlich auch viel schneller
Um von
die Daten nach WORK und PART zu verteilen würde gehen
"Tag-Felder importieren"
Quelle: %title%
Ziel: %work%: %part%
Und dann noch PART nach MOVEMENTNAME kopieren:
Aktion "Tag-Feld formatieren" für MOVEMENTNAME
Format string: %part%
Technisch könnte man das vermutlich schon, dafür gäbe es die entsprechend komplizierten
$IF und $NOT-Skriptbefehle.
Wenn Du Deine 30'000 Stücke aber zuerst filterst, erhöhst Du wie gesagt die visuell sofort sichtbare Treffergenauigkeit und andererseits minimierst Du den Aufwand für die effektiv zu ändernden Stücke.
Ich empfehle Dir diesen Weg, mit den von @ohrenkino vorgeschlagenen, stark vereinfachten 2 Schritten.
Fällt mir gerade ein: man könnte das auch in 1 Schritt machen und sogar einen regulären Ausdruck der Ausgangslösung recyclen:
Quelle: $regexp(%title%,(.*): (.*),$1==$2==$2)
Ziel: %work%==%part%==%movementnname%
Ohne es ausprobiert zu haben... mit dem letzten Vorschlag von @ohrenkino werden auch die Titel mit keinem oder mehr als einem Doppelpunkt wie gewünscht ignoriert?
ohne Doppelpunkt dürfte zu keinem Ergebnis führen. Bei mehreren Doppelpunkten ... auch ein Doppelpunkt ist "irgendein Zeichen", das mit (.*) erfasst wird. Also das wird dann nicht ignoriert.
Und da gäbe es keine Möglichkeit via Befehl zu sagen, ignoriere ab dem zweiten Doppelpunkt? Das Problem ist, dass nicht alle Dateien ordentlich getagged und es mehrere gibt, wo mehr als ein Doppelpunkt vorhanden ist.
Zeig doch mal so eine Datei - und könnte man die nicht vor den anderen behandeln, sprich die Vernichtung der doppelten Doppelpunkte findet statt bevor sich um die einfachen Doppelpunkte gekümmert wird - dann fallen die vormals doppelten raus und werden nicht weiter behandelt.
Vielleicht so: $regexp('Oboe Concerto in C major: I. Allegro con brio: attacca',(.*?): (.*),$1: )$replace($regexp('Oboe Concerto in C major: I. Allegro con brio: attacca',(.*?): (.*),$2),: , - )
Statt des strings setze die Feldvariable ein, z.B. $regexp(%title%,(.*?): (.*),$1: )$replace($regexp(%title%,(.*?): (.*),$2),: , - )
der richtige Ausdruck lautet: $regexp(%title%,(.*?): (.*),$1: )$replace($regexp(%title%,(.*?): (.*),$2),: , - )
Im von dir gezeigten Code fehlen einige Sterne.
Du kannst den Code überprüfen in Konverter>Tag-Tag
Und für die nächste Nachfrage wäre es gut, wenn du nicht nur sagen würdest, dass etwas nicht klappt, sondern auch wie sich das äußert.
Bitte die Formatstrings in Backticks ` einschließen, also z.B. `my format string` so dass Leerzeichen, Sterne und andere Sonderzeichen beibehalten werden.
Ja, wie @Florian Florian richtig erkannt hat, habe ich schon mit dem korrekten Zitieren Probleme.
Wahrscheinlich gab es auch ein Copy&Paste-Fehler, denn heute habe ich es noch einmal getestet und es funktioniert, wenn nach dem Doppelpunkt ein Leerzeichen ist, ansonsten wird das Ersetzen durch einen Bindestrich ignoriert. Liese sich der Befehl dahingehend noch anpassen, dass aus
Mit dieser Anpassung müsste es gehen: $regexp(%title%,(.*?): (.*),$1:\s*)$replace($regexp(%title%,(.*?):\s*(.*),$2),:, - , , )
Am Ende von $replace habe ich 2x Leerzeichen durch 1x Leerzeichen ersetzen hinzugefügt. Guck mal, ob das geht.
Übrigens: genau diese kleinen Abweichungen sind ein Grund, warum Filtern besser ist als eine Aktion oder Aktionsgruppe blind auf alle Dateien loszulassen. Es gibt immer Sonderfälle, die dann gesondert betrachtet werden müssen oder die ursprüngliche Idee muss nochmal bearbeitet werden.