gelöst: Verzeichnisse aus Dateinamen rekursiv anlegen
Moderators: Hacker, Stefan2, white
gelöst: Verzeichnisse aus Dateinamen rekursiv anlegen
Hallo Zusammen,
ich habe hier einige Zehntausend Dateien in Verzeichnisse einzusortieren, die noch anzulegen sind. Das hält ziemlich auf. Vielleicht hat Jemand eine Idee, wie ich mir die Arbeit leichter machen könnte.
Ich habe also eine Datei mit folgendem Namensformat:
Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
Von diesen Dateinamen möchte ich nun die rot dargestellten Bestandteil als Parameter für einen Verzeichniserstellung nutzen, besteht ein solches Verzeichnis bereits, sollte der Eintrag idealerweise übergangen werden.
Das Resultat, der Verzeichnisname sähe dann so aus:
Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005
Noch besser wäre es natürlich, wenn die Dateien gleich in das neu erstellte Verzeichnis verschoben (umbenannt) werden würden.
Sollte dies über das Mutliumbennentool gehen? Oder ist eine Batch-Datei besser geeignet? Wer hat so etwas schon gut lösen können?
Vielen Dank im voraus,
Arvid
ich habe hier einige Zehntausend Dateien in Verzeichnisse einzusortieren, die noch anzulegen sind. Das hält ziemlich auf. Vielleicht hat Jemand eine Idee, wie ich mir die Arbeit leichter machen könnte.
Ich habe also eine Datei mit folgendem Namensformat:
Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
Von diesen Dateinamen möchte ich nun die rot dargestellten Bestandteil als Parameter für einen Verzeichniserstellung nutzen, besteht ein solches Verzeichnis bereits, sollte der Eintrag idealerweise übergangen werden.
Das Resultat, der Verzeichnisname sähe dann so aus:
Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005
Noch besser wäre es natürlich, wenn die Dateien gleich in das neu erstellte Verzeichnis verschoben (umbenannt) werden würden.
Sollte dies über das Mutliumbennentool gehen? Oder ist eine Batch-Datei besser geeignet? Wer hat so etwas schon gut lösen können?
Vielen Dank im voraus,
Arvid
Last edited by adoerwald on 2013-08-08, 13:27 UTC, edited 1 time in total.
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Re: Verzeichnisse aus Dateinamen oder Liste rekursiv anlgen
Hi Arvid, willkommen.
Das kannst du zB mit ein bisschen RegEx und einer Batch erledigen.
(Ich gehe davon aus, dass alle deine Dateinamen diesem Muster entsprechen!
Und das du keine Dateien mit Umlaute hast. Also genau wie dein Beispiel.)
Zuerst erstelle eine Textdatei mit allen deiner Dateien:
Dann editiere diesen Text.
Matche alles vor den beiden Bindestrichen, und dann die vierstellige Jahreszahl:
(.+) - - .+ - (\d{4}).flac
Dann ersetze mit dem was in den Klammern festgehalten wurde,
\1 - \2
und füge noch ein paar DOS-Kommandos hinzu.
MD "\1 - \2"
Die genaue RegEx-Syntax kommt auf dein benutztes Werkzeug an.
MD "\1 - \2"\nMOVE "$0" "\1 - \2"
Die genaue RegEx-Syntax kommt auf dein benutztes Werkzeug an.
(Hmm, das müsste doch auch in einer Zeile,
wenn beide Befehle mittels '&' verbunden werden:
MD "\1 - \2" && MOVE "$0" "\1 - \2")
Meiner Einer spielt mal wieder mit VIM herum, und da macht man das folgendermaßen:
0:s/\(.\+\) - - .\+ - \(\d\{4}\).flac/MD "\1 - \2"\rMOVE "&" "\1 - \2"/j
Diese Zeichen führt man für jede Zeile als Macro aus.
Das ergibt die folgenden beiden Zeilen:
Diese Zeile(n) kopiert man in eine Textdatei mit der Endung .CMD
und führt diese im Hauptordner deiner Dateien aus. (NACHDEM man ein Backup erstellt hat!)
Ergebnis:
Vorher:
Nachher:
.
Das kannst du zB mit ein bisschen RegEx und einer Batch erledigen.
Benutze ein Tool, welches RegEx kann, zB einen Texteditor.adoerwald wrote:Ich habe also eine Datei mit folgendem Namensformat:
Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
Von diesen Dateinamen möchte ich nun die rot dargestellten Bestandteil als Parameter für einen Verzeichniserstellung nutzen,
Das Resultat, der Verzeichnisname sähe dann so aus:
Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005
(Ich gehe davon aus, dass alle deine Dateinamen diesem Muster entsprechen!
Und das du keine Dateien mit Umlaute hast. Also genau wie dein Beispiel.)
Zuerst erstelle eine Textdatei mit allen deiner Dateien:
Code: Select all
dir /b *.flac > Liste.txt
Dann editiere diesen Text.
Matche alles vor den beiden Bindestrichen, und dann die vierstellige Jahreszahl:
(.+) - - .+ - (\d{4}).flac
Dann ersetze mit dem was in den Klammern festgehalten wurde,
\1 - \2
und füge noch ein paar DOS-Kommandos hinzu.
MD "\1 - \2"
Die genaue RegEx-Syntax kommt auf dein benutztes Werkzeug an.
Diese Funktion habe ich weggelassen. Wenn das Verzeichnis bereits existiert, gibt es halt eine Fehlermeldung,... aber dann geht's weiter.besteht ein solches Verzeichnis bereits, sollte der Eintrag idealerweise übergangen werden.
Dazu ergänze die Ersetzung:Noch besser wäre es natürlich, wenn die Dateien gleich in das neu erstellte Verzeichnis verschoben (umbenannt) werden würden.
MD "\1 - \2"\nMOVE "$0" "\1 - \2"
Die genaue RegEx-Syntax kommt auf dein benutztes Werkzeug an.
(Hmm, das müsste doch auch in einer Zeile,
wenn beide Befehle mittels '&' verbunden werden:
MD "\1 - \2" && MOVE "$0" "\1 - \2")
Meiner Einer spielt mal wieder mit VIM herum, und da macht man das folgendermaßen:
0:s/\(.\+\) - - .\+ - \(\d\{4}\).flac/MD "\1 - \2"\rMOVE "&" "\1 - \2"/j
Diese Zeichen führt man für jede Zeile als Macro aus.
Code: Select all
"my$
:% normal @m
Code: Select all
MD "Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005"
MOVE "Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac" "Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005"
Diese Zeile(n) kopiert man in eine Textdatei mit der Endung .CMD
und führt diese im Hauptordner deiner Dateien aus. (NACHDEM man ein Backup erstellt hat!)
Ergebnis:
Vorher:
Code: Select all
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 02 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 03 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 5) - - 04 - Concerto for Cello in D RV 403 - I. Allegro - 2008.flac
Code: Select all
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 02 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 03 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
d:\temp\Antonio Vivaldi - Complete Cello Concertos (disc 5) - 2008\Antonio Vivaldi - Complete Cello Concertos (disc 5) - - 04 - Concerto for Cello in D RV 403 - I. Allegro - 2008.flac
d:\temp\move.cmd
.
Warum nicht gleich im MUT (<Strg+M>)?
Suche nach:Ersetze durch:[x] Regex
Gruss
Holger
Suche nach:
Code: Select all
(.+) - -( .+) - (\d{4}).flac
Code: Select all
$1 - $3\\$2.flac
Gruss
Holger
Hallo Holger, vielen Dank,
heute hatte ich endlich mal Gelegenheit, Deinen Tipp auszuprobieren.
Warum nicht gleich im MUT (<Strg+M>)?
Suche nach:Code:
(.+) - -( .+) - (\d{4}).flac
Ersetze durch:Code:
$1 - $3\\$2.flac
[x] Regex
Leider klappt das nicht, es werden keine Verzeichnisse angelegt, es wird auch keine Umbenennung vorgenommen.
Hast Du es mit dem Dateinamen ausprobiert und hat es geklappt? Vielleicht mache ich etwas fals (ziemlich sicher sogar).
@Stefan: Vielen Dank, aber den Weg werde ich nur dann ausprobieren, wenn es der einfachere nicht tut ... Aber vielen Dank dafür
Arvid
heute hatte ich endlich mal Gelegenheit, Deinen Tipp auszuprobieren.
Warum nicht gleich im MUT (<Strg+M>)?
Suche nach:Code:
(.+) - -( .+) - (\d{4}).flac
Ersetze durch:Code:
$1 - $3\\$2.flac
[x] Regex
Leider klappt das nicht, es werden keine Verzeichnisse angelegt, es wird auch keine Umbenennung vorgenommen.
Hast Du es mit dem Dateinamen ausprobiert und hat es geklappt? Vielleicht mache ich etwas fals (ziemlich sicher sogar).
@Stefan: Vielen Dank, aber den Weg werde ich nur dann ausprobieren, wenn es der einfachere nicht tut ... Aber vielen Dank dafür
Arvid
Das sollte aber funktioklappen, Arvid, wenn deine Dateinamen
tatsächlich so aufgebaut sind und wenn du Schreibzugriff hast.
Test
Vorher:
c:\TEMP\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
Nachher:
c:\TEMP\Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005\ 01 - Concerto for Cello in D RV 403 - I. Allegro.flac
Das "2005\ 01 - Concerto" zeigt aber auch das der RegEx etwas angepasst werden muss:
Anstelle von
(.+) - -( .+) - (\d{4}).flac
müsste es so sein
(.+) - - (.+) - (\d{4}).flac
.
tatsächlich so aufgebaut sind und wenn du Schreibzugriff hast.
Test
Vorher:
c:\TEMP\Antonio Vivaldi - Complete Cello Concertos (disc 2) - - 01 - Concerto for Cello in D RV 403 - I. Allegro - 2005.flac
Nachher:
c:\TEMP\Antonio Vivaldi - Complete Cello Concertos (disc 2) - 2005\ 01 - Concerto for Cello in D RV 403 - I. Allegro.flac
Das "2005\ 01 - Concerto" zeigt aber auch das der RegEx etwas angepasst werden muss:
Anstelle von
(.+) - -( .+) - (\d{4}).flac
müsste es so sein
(.+) - - (.+) - (\d{4}).flac
.
Welche TC-Version benutzt du?
Apropos:
Falls der Dateiname in dem neuen Ordner komplett erhalten bleiben soll, musst du unter Ersetzten durch:angeben. Die zuerst angegeben Variante setzt als Dateinamen nur den Titel und nicht den kompletten Namen inklusive CD-Name + Jahr.
Obacht:
Wenn die Dateien sich bereits in einer tiefen Verzeichnisstruktur befinden, könnte der Gesamtpfad > 256 Zeichen lang werden, und dann nicht mehr von einigen Windowsprogrammen angesprochen werden.
Gruss
Holger
sollte schon mindestens die Version 8.0 sein, damit das funktioniert.History.txt wrote: 16.09.11 Release Total Commander 8.0 public beta 1 (32/64)
...
22.07.11 Added: Multi-rename tool: Create missing subfolders automatically when renaming. The Undo function will NOT remove these extra folders (32/64)
Apropos:
Falls der Dateiname in dem neuen Ordner komplett erhalten bleiben soll, musst du unter Ersetzten durch:
Code: Select all
$1 - $3\\$0
Obacht:
Wenn die Dateien sich bereits in einer tiefen Verzeichnisstruktur befinden, könnte der Gesamtpfad > 256 Zeichen lang werden, und dann nicht mehr von einigen Windowsprogrammen angesprochen werden.
Gruss
Holger
- ghisler(Author)
- Site Admin
- Posts: 50610
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact:
Total Commander zu alt? Sie benötigen mindestens Version 8.0.Leider klappt das nicht, es werden keine Verzeichnisse angelegt
Author of Total Commander
https://www.ghisler.com
https://www.ghisler.com