Hilfe zu Aktion mit mehreren Befehlen benötigt

Hallo,

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?

Enno

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?

1 Like

Danke Dir!

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%

1 Like

Danke Euch!

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.

Ehrlich: Filterbefehl.
Denn gerade, wenn

sind, dann ist es umso gefährlicher, eine Aktionsgruppe blind auf solche Daten loszulassen.

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.

Da nehme ich mal mein altes Beispiel. Es kam vor, dass Dateien so ähnlich getagged wurden:

Oboe Concerto in C major: I. Allegro con brio: attacca

Im Prinzip müsste es passen, wenn man nach dem ersten Doppelpunkt alle anderen Doppelpunkte in Bindestriche wandeln würde. Nur wie anstellen?

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),: , - )

Das werde ich mal testen, thanks.

Also zuerst Filtern des Genres Klassik,

dann

und dann das

Das Doppelpunkt-Geschichte klappt noch nicht, wenn ich es über "Tag-Feld formatieren" TITLE mache:

$regexp(%title%,(.?): (.),$1: )$replace($regexp(%title%,(.?): (.),$2),: , - )

Was mache ich da falsch? Alles andere funktioniert prima wie gewünscht.

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.

Danke für Deine Geduld.

Ja, wie @Florian Florian richtig erkannt hat, habe ich schon mit dem korrekten Zitieren Probleme. :wink:

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

Matthäuspassion, SWV 479: Introitus:Test

oder aus

Matthäuspassion, SWV 479:Introitus:Test

letztlich

Matthäuspassion, SWV 479: Introitus - Test

wird?

In der Zwischenzeit kannst Du jeden gefundenen regulären Ausdruck selber auf Onlineseiten wie

testen, erklären lassen und selber probieren, wie Ergänzungen und Veränderungen sich auf Deine Testfälle auswirken.

Ja, das war das vorgestellte Muster.

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.

1 Like