gelöst: Verzeichnisse aus Dateinamen rekursiv anlegen

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
adoerwald
Junior Member
Junior Member
Posts: 3
Joined: 2013-08-06, 11:13 UTC

gelöst: Verzeichnisse aus Dateinamen rekursiv anlegen

Post by *adoerwald »

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
Last edited by adoerwald on 2013-08-08, 13:27 UTC, edited 1 time in total.
User avatar
Dalai
Power Member
Power Member
Posts: 9977
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Ohne genau zu wissen, ob es dir dabei hilft: Schau dir mal extDir an.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Verzeichnisse aus Dateinamen oder Liste rekursiv anlgen

Post by *Stefan2 »

Hi Arvid, willkommen.

Das kannst du zB mit ein bisschen RegEx und einer Batch erledigen.

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
Benutze ein Tool, welches RegEx kann, zB einen Texteditor.
(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.


besteht ein solches Verzeichnis bereits, sollte der Eintrag idealerweise übergangen werden.
Diese Funktion habe ich weggelassen. Wenn das Verzeichnis bereits existiert, gibt es halt eine Fehlermeldung,... aber dann geht's weiter.




Noch besser wäre es natürlich, wenn die Dateien gleich in das neu erstellte Verzeichnis verschoben (umbenannt) werden würden.
Dazu ergänze die Ersetzung:
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
Das ergibt die folgenden beiden Zeilen:

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
Nachher:

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

.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Warum nicht gleich im MUT (<Strg+M>)?
Suche nach:

Code: Select all

(.+) - -( .+) - (\d{4}).flac
Ersetze durch:

Code: Select all

$1 - $3\\$2.flac
[x] Regex

Gruss
Holger
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Oder so :oops:
adoerwald
Junior Member
Junior Member
Posts: 3
Joined: 2013-08-06, 11:13 UTC

Post by *adoerwald »

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
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

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

.
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Achso:

(.+) - - (.+) - (\d{4}).flac
$1 - $3\\$2.flac
[x] E
[x] Regex




Im "Neuer Name" muss bereits ein Backslash zu sehen sein.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Welche TC-Version benutzt du?
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)
sollte schon mindestens die Version 8.0 sein, damit das funktioniert.

Apropos:
Falls der Dateiname in dem neuen Ordner komplett erhalten bleiben soll, musst du unter Ersetzten durch:

Code: Select all

$1 - $3\\$0
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
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50610
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Leider klappt das nicht, es werden keine Verzeichnisse angelegt
Total Commander zu alt? Sie benötigen mindestens Version 8.0.
Author of Total Commander
https://www.ghisler.com
adoerwald
Junior Member
Junior Member
Posts: 3
Joined: 2013-08-06, 11:13 UTC

Post by *adoerwald »

Vielen Dank an Alle, jetzt hat es geklappt!

Was habe ich falsch gemacht?

- Zu alte Version benutzt!
- Ohne Admin-Rechte gearbeitet!

Jetzt klappt es sehr gut und ich bin extrem zufrieden mit dem Resultat!

Fettes Lob an die Helfer!!!

Soll ich den Thread auf gelöst setzen?

Dankbare Grüße,

Arvid
Post Reply