MUT: wie 6 Zeichen am Ende entfernen lassen?
Moderators: Hacker, Stefan2, white
MUT: wie 6 Zeichen am Ende entfernen lassen?
Dateinamen von hinten kürzen Mehrfach-Umbenenn-Tool
Hallo,
Mehere Dateinamen sind unterschiedlich lang.
Es sollen nun immer die letzten 6 Zeichen entfernt werden.
Wie bekomme ich das hin?
Hallo,
Mehere Dateinamen sind unterschiedlich lang.
Es sollen nun immer die letzten 6 Zeichen entfernt werden.
Wie bekomme ich das hin?
Gruß Andreas
Win10 x64 +++ Total Commander 10 +++ Directory Opus 12 +++
Win10 x64 +++ Total Commander 10 +++ Directory Opus 12 +++
Die Idee ist an sich richtig, aber mit diesem Ausdruck lieferst Du genau die letzten 6 Zeichen. Andreas wollte die letzten 6 Zeichen entfernen, was mit folgender Variante gelingt:jb3363 wrote:Suchen nach: .{6}(.{6})$
Ersetzen durch: $1
Suchen nach: (.*).{6}\.(.*)$
Ersetzen durch: $1.$2
Evtl. müßte da noch in die zweite Klammer ein Modifier, damit der Stern nicht greedy ist, falls Du Punkte im Dateinamen hast. Aber prinzipiell sollte das nun funktionieren.
Wenn Du nur Dateien mit einer Endung .ext hast, kannst Du auch mit folgendem Ausdruck auf Nummer Sicher gehen (bei regulären Ausdrücken weiß man nie, was man damit anstellt, wenn man sie nicht gewohnt ist):
Suchen nach: (.*).{6}(\.ext)$
Ersetzen durch: $1$2
Viele Grüße
Christian
Christian
Eigentlich dachte ich immer, ich hätte verstanden, wie reguläre Ausdrücke funktionieren. Aber obiges Beispiel produziert im MUT etwas anderes, als ich erwartet habe.jb3363 wrote:Suchen nach: .{6}(.{4})$
Ersetzen durch: $1
Funktioniert natürlich nur bei Endungen mit Punkt und 3 Buchstaben, also ".txt".


".{6}" heißt "6 beliebige Zeichen".
"(.{4})$" heißt "4 beliebige Zeichen am Ende der Zeichenkette" (@jb3363: aber nicht nur Buchstaben:!:)
"Ersetzen durch $1" heißt für mich, daß die Backreference $1 durch den Text, der vom in der ersten Klammer definierten Ausdruck gefunden wird, ersetzt wird, was im obigen Fall die letzten 4 Zeichen der Zeichenkette wären.
Nach genau diesem Verständnis habe ich meinen Ausdruck
Code: Select all
Suchen nach: (.*).{6}\.(.*)$
Ersetzen durch: $1.$2
Wieso funktioniert .{6}(.{4})$, wenn man $1 ersetzen läßt?


Viele Grüße
Christian
Christian
In der ersten runden Klammer steht (.{4}), was meiner Meinung nach nur noch die Endung übrig lassen sollte.sapiens wrote:du sagst doch selbst: das, was in den ersten (runden) Klammern steht, wird durch $1 ersetzt.CSe wrote:Wieso funktioniert .{6}(.{4})$, wenn man $1 ersetzen läßt?![]()
Viele Grüße
Christian
Christian
Korrekt. Jedoch nicht (wie von Dir offensichtlich erwartet) vom gesamten Dateinamen, sondern nur vom Muster der RegEx und dies sind in dem Fall nur die letzten 6 Zeichen + 4 Zeichen Erweiterung. Es ist somit korrekt (solange man eine Erweiterung mit 3 Zeichen als zwingend ansieht).In der ersten runden Klammer steht (.{4}), was meiner Meinung nach nur noch die Endung übrig lassen sollte.
The doorstep to the temple of wisdom is a knowledge of our own ignorance. Benjamin Franklin
Ich blick's trotzdem nicht.
Es wäre nett, wenn sich mal einer der Senior Members hierzu äußern könnte.
Zumal in der Hilfe:
Es wäre nett, wenn sich mal einer der Senior Members hierzu äußern könnte.
Zumal in der Hilfe:
steht. *Darum* versteh ich's nicht.Teilausdrücke für Suchen und Ersetzen
Textteile in Klammern gelten als Teilausdrücke.
Beispiel: Wenn man in einer MP3-Datei Titel und Interpret vertauschen will, die durch einen Bindestrich und zwei Leerzeichen getrennt sind (Titel - Interpret.mp3), so kann man das so lösen:
Suchen nach: (.*) - (.*)\.mp3
Ersetzen durch: $2 - $1.mp3
Dabei steht $1 für den Text in der ersten Klammer, $2 für den in der 2. Klammer.
Viele Grüße
Christian
Christian
Bin zwar keiner, nehme mir trotzdem die Freiheit heraus zu antworten.Es wäre nett, wenn sich mal einer der Senior Members hierzu äußern könnte.


Alles ganz einfach (wenn man es erst mal verstanden hat

Beispiel: Dateiname
ABCDEFGH.ACC
RegEx: .{6}(.{4})$
referenziert jetzt folgenden Teil (fett)
ABCDEFGH.ACC
RegEx: (.{4})
referenziert folgenden Teil (fett)
ABCDEFGH.ACC
also wird bei Suchen und Ersetzen durch $1 dann
AB.ACC
Der Teil AB bleibt einfach stehen, da er durch die 1. RegEx gar nicht mit einbezogen wird. Der Teil .ACC wird durch die Klammer und $1 hinzugefügt.
Vielleicht wird es auch verständlicher, wenn die 1. RegEx .{6}(.{4})$ durch NICHTS ersetzt wird, dann bleibt nämlich nur ein AB stehen.
Alles klar?


The doorstep to the temple of wisdom is a knowledge of our own ignorance. Benjamin Franklin
Klar, kein Problem.nevidimka wrote:Bin zwar keiner, nehme mir trotzdem die Freiheit heraus zu antworten.Es wäre nett, wenn sich mal einer der Senior Members hierzu äußern könnte.![]()
Ah, jetzt, ja! Nach dieser Aussage schon. Da ich bisher reguläre Ausdrücke unter Linux und/oder Perl verwendet habe, habe ich an die Kombination mit dem MUT nicht gedacht!nevidimka wrote:Der Teil AB bleibt einfach stehen, da er durch die 1. RegEx gar nicht mit einbezogen wird. Der Teil .ACC wird durch die Klammer und $1 hinzugefügt.
Vielleicht wird es auch verständlicher, wenn die 1. RegEx .{6}(.{4})$ durch NICHTS ersetzt wird, dann bleibt nämlich nur ein AB stehen.
Alles klar?![]()
Wunderbar, wieder etwas gelernt!

Danke schön. So im Nachinein: Natürlich! *patsch* Muß ja so sein... Puh, hab ich also bei den Ausdrücken doch nix falsch verstanden, sondern nur die Reaktion des TC nicht bedacht. *aufatem*
Viele Grüße
Christian
Christian
Stell Dein Licht doch nicht unter den Scheffelnevidimka wrote:Bin zwar keiner, nehme mir trotzdem die Freiheit heraus zu antworten. Very Happy Razz


sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams