Bezeichnungsbestandteile eines Dateinamens tauschen

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
besserwisser
Junior Member
Junior Member
Posts: 6
Joined: 2007-01-03, 20:36 UTC
Location: Nürnberg

Bezeichnungsbestandteile eines Dateinamens tauschen

Post by *besserwisser »

Hallo Leute,

ich habe mehrere tausend Karaoke Dateien. Bei diesen möchte ich gerne die Organisation der Bezeichnung ändern. So möchte ich z.B. die Datei Bananarama - Venus.mpg zu Venus - Bananarama.mpg automatisch ändern lassen. Natürlich ist auch die Anzahl der Buchstaben vor und nach dem minus unterschiedlich.
Wie kann ich dieses bewerkstelligen ?

Gruß

Alex
User avatar
hoppfrosch
Junior Member
Junior Member
Posts: 67
Joined: 2004-10-20, 05:39 UTC

Post by *hoppfrosch »

Das geht über Regular Expressions.
Im Multi-Rename Tool (ctrl-M) folgendes Vorgehen:

Umbenennmaske/Dateiname: [N]

Suchen und Ersetzen:
Suchen nach: ([a-zA-Z]*) - ([a-zA-Z]*)
Ersetzen durch: $2 - $1
Regex: aktiviert
Subst: deaktiviert


Der Regex ([a-zA-Z]*) - ([a-zA-Z]*) bedeutet:
Suche nach einer Zeichenfolge die die Zeichen a bis z und A bis Z beliebig oft beinhaltet. Diese Zeichenfolge wird gefolgt von " - ". Anschliessend muss wieder eine Zeichenfolge folgen die die Zeichen a bis z und A bis Z beliebig oft beinhaltet.

Die runden Klammern () bewirken eine Gruppierung - und eine Speicherung in temporären Variablen. Im "Ersetzen durch" werden diese Variable dann verwendet: Ersetze den Term durch die zweite gefundene
Zeichenfolge, gefolgt von " - " und der ersten gefundenen Zeichenfolge.

Sollen deine zu suchenden Strings mehr als Buchstaben - z.B. auch Ziffern enthalten, so sind die entsprechenden Suchausdrücke zu erweitern (im Beispiel mit Ziffern: ([a-zA-Z0-9]*)
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50843
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Falls die Dateien auch Sonderzeichen enthalten, würde ich folgende Einstellungen vorschlagen (ausprobiert!):

Suchen nach: (.*) - (.*)\.(.*)
Ersetzen durch: $2 - $1.$3
Regex: aktiviert

"." bedeutet ein beliebiges Zeichen. .* also beliebige Zeichen, gefolgt von Leerschlag Strich Leerschlag. Dann wieder beliebige Zeichen, ein Punkt (der \ verhindert, dass der Punkt als beliebiges Zeichen erkannt wird) und anschliessend die Endung (z.B. mp3, ac3 etc).
Author of Total Commander
https://www.ghisler.com
besserwisser
Junior Member
Junior Member
Posts: 6
Joined: 2007-01-03, 20:36 UTC
Location: Nürnberg

Post by *besserwisser »

Danke für Euere Hilfe. Jedoch komme ich weder mit dem einen noch dem anderen weiter.
Bei Hoppfrosch sieht es so aus:
Original Ergebnis

Afroman - because i got high.mpg = Because - Afroman i got high.mpg
Alan Price - the house that jack built.mpg = Alan the - price house that jack built.mpg
B2K & P Diddy - bump bump bump.mp3 = B2K & P bump - Diddy bump bump.mp3
Ashanti & ja rule - Mesmerize.mp3 = Ashanti & ja mesmerize - rule.mp3

Bei Gishler gibt es kein Ergebnis.

Könnt Ihr mir nochmal helfen ?
Ich habe die aktuelle Version 7b2 installiert.
Kann man hier einen allgemeingültigen String entwerfen ?

Alex
User avatar
Stitscher
Power Member
Power Member
Posts: 1058
Joined: 2004-02-17, 12:34 UTC
Location: Hamburg, Germany

Post by *Stitscher »

besserwisser wrote: Bei Gishler gibt es kein Ergebnis.
Hier läuft es perfekt.

Haken bei RegEx gemacht?

Stitscher
besserwisser
Junior Member
Junior Member
Posts: 6
Joined: 2007-01-03, 20:36 UTC
Location: Nürnberg

Post by *besserwisser »

Das Problem ist, daß die Dateien aus einer unterschiedlichen Anzahl von Worten bestehen. Vor und nach dem MINUS. Ich tüftle schon die ganze Zeit rum, komme aber nicht auf eine allgemeingültige Formel.
User avatar
Stitscher
Power Member
Power Member
Posts: 1058
Joined: 2004-02-17, 12:34 UTC
Location: Hamburg, Germany

Post by *Stitscher »

besserwisser wrote:Das Problem ist, daß die Dateien aus einer unterschiedlichen Anzahl von Worten bestehen. Vor und nach dem MINUS.
Das ist hier natürlich auch der Fall und es funktioniert.
Ich tüftle schon die ganze Zeit rum, komme aber nicht auf eine allgemeingültige Formel.
Noch allgemeiner als die Obige?
besserwisser
Junior Member
Junior Member
Posts: 6
Joined: 2007-01-03, 20:36 UTC
Location: Nürnberg

Post by *besserwisser »

Warum ist bei mir das Ergebnis bei Eingabe des Strings von Hoppfrosch anders ?
([a-zA-Z]*) - ([a-zA-Z]*) $2 - $1
REGEX ist auch angehakt. SUBST nicht.

Afroman - because i got high.mpg = Because - Afroman i got high.mpg

Ergebnis sollte sein:
because i got high - Afroman.

Warum klappt das nicht ?
Hat es was mit der Betaversion zu tun ?
User avatar
Stitscher
Power Member
Power Member
Posts: 1058
Joined: 2004-02-17, 12:34 UTC
Location: Hamburg, Germany

Post by *Stitscher »

Bei der Methode von hoppfrosch bekomm ich auch falsche Ausgaben.
Wie oben schon von mir erwähnt klappt es aber mit den Strings von Ghisler perfekt.

Stitscher
besserwisser
Junior Member
Junior Member
Posts: 6
Joined: 2007-01-03, 20:36 UTC
Location: Nürnberg

Post by *besserwisser »

Hat nun doch mit Ghisler`s geklappt. Was vorher falsch lief kann ich nicht nachvollziehen.
Kann man auch noch eine Verschiebefunktion in einen anderen Ordner der geänderten Datensätze mit einbauen ?
User avatar
Stitscher
Power Member
Power Member
Posts: 1058
Joined: 2004-02-17, 12:34 UTC
Location: Hamburg, Germany

Post by *Stitscher »

besserwisser wrote: Kann man auch noch eine Verschiebefunktion in einen anderen Ordner der geänderten Datensätze mit einbauen ?
Nein.
Zumindest nicht, wie man sich das wünschen würde.

Bisher gibt es nur Workarounds.
http://www.ghisler.ch/board/viewtopic.php?p=84205#84205

Stitscher
User avatar
hoppfrosch
Junior Member
Junior Member
Posts: 67
Joined: 2004-10-20, 05:39 UTC

Post by *hoppfrosch »

Tja, dass die Namensbestandteile auch Leerzeichen beinhalten, spiegelt sich so auch nicht in dem von mir genanten Regex nieder.

Wenn Leerzeichen in den Zeichenfolgen beinhaltet sein dürfen, dann müssen auch die "Klassen" (d.h der Term in den eckigen Klammern) Leerzeichen beinhalten.

([a-zA-Z ]*) - ([a-zA-Z ]*)

Merke: Alle Zeichen die in der Zeichenfolge zulässig sein sollen, müssen auch in den eckigen Klammern auftauchen ...

Ghisler macht mit seinem Regex-Ausdruck folgendes:
Sein Term (.*) - (.*)\.(.*) bedeutet:
* '.' heisst: Jedes beliebige Zeichen
* '.*' heisst: Jedes beliebige Zeichen beliebig oft
* '(.*)' speichere die Zeichenfolge "Jedes beliebige Zeichen beliebig oft" in einer Variable
* '(.*) - (.*)\.(.*)': Die erste Zeichenfolge "Jedes beliebige Zeichen beliebig oft" geht bis zur Zeichenfolge " - ". Die zweite Zeichenfolge "Jedes beliebige Zeichen beliebig oft" geht bis zum Punkt (da '.' in Regex bedeutet "Jedes beliebige Zeichen" muss man, wenn man einen Punkt im String finden will, '\.' verwenden ...). Die dritte Zeichenfolge "Jedes beliebige Zeichen beliebig oft" geht vom Punkt bis zum Ende und stellt die Extension dar

Ghislers Ansatz ist für das Problem sicher der bessere, da man sich nicht darum kümmern muss, was für Zeichen in den Zeichenfolgen enthalten sind: der gesamtstring muss nur dem Muster folgen: "i_r gend was - irg endwas.irgend was3"
Mein Vorschlag bietet hingegen bessere Kontrollmöglichkeiten über die Zusammensetzung des "Irgendwas" ...

P.S: Auch mein Vorschlag ist getestet
Post Reply