Dateipfade innerhalb einer Textdatei ähnlich wie ID3-Tags behandeln und neu arrangieren
Wörtern zwischen bzw. neben definierten "Separatoren" wie z.B. Backslash und/oder
Bindestrich Eindeutigkeit zuweisen und innerhalb der Zeile nach Bedarf umstellen lassen...
Guten Tag die Herschaften dieser netten vielversprechenden Gemeinde!
Ich habe immer noch das unbequeme Gefühl mich etwas ungeschickt anzustellen oder den Wald vor lauter Bäumen nicht zu sehen;
denn nachdem ich einem gewissen Teil der Festplatte eine neue Ordnerstruktur verpasst habe, bleibt eine diesbezüglich relevante
Textdatei mit Inhalt der entsprechend alten Ordnerstruktur/Dateipfade als hartnäckige Aufgabe für mich zurück. Über die einzig mir
geläufige Methodik das Ganze, ählich wie z.B. bei einem Tag-Editor, irgendwie mit definieren von Separatoren zu behandeln erhoffte
ich mir in diversen Texteditoren (via RegEx) eine passende Lösung; musste jedoch dieses Vorhaben als hoffnungslos aussichtslos
abtun. Da mir die Angelegenheit natürlich keine Ruhe lässt bin ich hin und wieder mal am stöbern und heute auf dieses interessante
Forum gestoßen. Ich bin eine lange Zeit mit der Suche verweilt, um womöglich auf einen ähnlichen Fall zu stoßen oder mir ggf. aus
div. Beiträgen etwas gescheites herzuleiten. Da sich mir dieses Verfahren - das Schreiben einer eigenen Batchdatei - nun offenbar
sehr schwierig gestaltet bleibt einzig und allein Hoffnung auf ebenso kompetent und hilfsbereite Antworten, wie beim Durchforsten
der Beiträge, zu stoßen. Daher nun der Versuch meine Problematik mal darzustellen...
Gegeben ist eine ganz normale .txt-Datei mit jeweils einem kompletten Dateipfad pro Zeile (und stets identischer Anordnung):
x:\Übergeordneter Ordner\Ordner -- Name\Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
x:\Übergeordneter Ordner\Ordner -- Name\Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
x:\Übergeordneter Ordner\Ordner -- Name\Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
diese sollen innerhalb der .txt-Datei pro Zeile in nachfolgendes Format umgestellt werden:
x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
Hierbei dachte ich mir das Backslash \ und Bindestriche -- als Separator o.ä. dienen und die Bereiche zwischen diesen
als Eindeutigkeiten (wie z.B. "Wort1\Wort2 -- Wort3.ext"definiert werden könnten?
Ich bin da echt überfragt und wäre über einen entsprechenden Vorschlag zur Umsetzung (gerne auch ein alternatives Programm
oder die Syntax für RegEx) äußerst dankbar!!! Ich versuche bei Unklarheiten zeitnah zu reagieren, was jedoch aktuell in Abhängigkeit
von meinem Nachtdienst ist. Vielen Dank trotzdem vorab und danke fürs zuhören =)
Grüße,
datasette
Bindestrich Eindeutigkeit zuweisen und innerhalb der Zeile nach Bedarf umstellen lassen...
Guten Tag die Herschaften dieser netten vielversprechenden Gemeinde!
Ich habe immer noch das unbequeme Gefühl mich etwas ungeschickt anzustellen oder den Wald vor lauter Bäumen nicht zu sehen;
denn nachdem ich einem gewissen Teil der Festplatte eine neue Ordnerstruktur verpasst habe, bleibt eine diesbezüglich relevante
Textdatei mit Inhalt der entsprechend alten Ordnerstruktur/Dateipfade als hartnäckige Aufgabe für mich zurück. Über die einzig mir
geläufige Methodik das Ganze, ählich wie z.B. bei einem Tag-Editor, irgendwie mit definieren von Separatoren zu behandeln erhoffte
ich mir in diversen Texteditoren (via RegEx) eine passende Lösung; musste jedoch dieses Vorhaben als hoffnungslos aussichtslos
abtun. Da mir die Angelegenheit natürlich keine Ruhe lässt bin ich hin und wieder mal am stöbern und heute auf dieses interessante
Forum gestoßen. Ich bin eine lange Zeit mit der Suche verweilt, um womöglich auf einen ähnlichen Fall zu stoßen oder mir ggf. aus
div. Beiträgen etwas gescheites herzuleiten. Da sich mir dieses Verfahren - das Schreiben einer eigenen Batchdatei - nun offenbar
sehr schwierig gestaltet bleibt einzig und allein Hoffnung auf ebenso kompetent und hilfsbereite Antworten, wie beim Durchforsten
der Beiträge, zu stoßen. Daher nun der Versuch meine Problematik mal darzustellen...
Gegeben ist eine ganz normale .txt-Datei mit jeweils einem kompletten Dateipfad pro Zeile (und stets identischer Anordnung):
x:\Übergeordneter Ordner\Ordner -- Name\Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
x:\Übergeordneter Ordner\Ordner -- Name\Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
x:\Übergeordneter Ordner\Ordner -- Name\Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
diese sollen innerhalb der .txt-Datei pro Zeile in nachfolgendes Format umgestellt werden:
x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
Hierbei dachte ich mir das Backslash \ und Bindestriche -- als Separator o.ä. dienen und die Bereiche zwischen diesen
als Eindeutigkeiten (wie z.B. "Wort1\Wort2 -- Wort3.ext"definiert werden könnten?
Ich bin da echt überfragt und wäre über einen entsprechenden Vorschlag zur Umsetzung (gerne auch ein alternatives Programm
oder die Syntax für RegEx) äußerst dankbar!!! Ich versuche bei Unklarheiten zeitnah zu reagieren, was jedoch aktuell in Abhängigkeit
von meinem Nachtdienst ist. Vielen Dank trotzdem vorab und danke fürs zuhören =)
Grüße,
datasette
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143543
Url: https://administrator.de/forum/dateipfade-innerhalb-einer-textdatei-aehnlich-wie-id3-tags-behandeln-und-neu-arrangieren-143543.html
Ausgedruckt am: 23.04.2025 um 10:04 Uhr
13 Kommentare
Neuester Kommentar
Moin datasette,
willkommen im Forum.
Nur zur Sicherheit, obwohl deine Beschreibung wirklich schon hervorragend ist, noch zwei Nachfragen zum Ist-Zustand
Grüße
Biber
willkommen im Forum.
Nur zur Sicherheit, obwohl deine Beschreibung wirklich schon hervorragend ist, noch zwei Nachfragen zum Ist-Zustand
- außer den angegeben doppelten Bindestrichen in deiner Namenskonvention sind keine einfachen Bindestriche vorhanden (z.B. ein Dateiautor "Müller-Lüdenscheid")?
- Schaffenswerk und Dateiautor können auch aus mehreren Worten bestehen (z.B. "Mein Ehrenwort" von "Helmut Kohl" )?
Grüße
Biber

Hallo datasette,
keine reine Batchlösung (ginge aber auch).
Dein Trenner " -- " ist zwar eindeutig, für die Batchverarbeitung aber eher ungünstig. Deshalb benutze ich Sed mit einer RegExp und ersetze die mit "#" wobei ich hoffe das das Nummernzeichen nicht im Text vorkommt.
Gruß
LotPings
Upps, wenn man eine Hilfsvariable benutzt, sollte man die auch einsetzen
keine reine Batchlösung (ginge aber auch).
Dein Trenner " -- " ist zwar eindeutig, für die Batchverarbeitung aber eher ungünstig. Deshalb benutze ich Sed mit einer RegExp und ersetze die mit "#" wobei ich hoffe das das Nummernzeichen nicht im Text vorkommt.
@Echo off
:: x:\Übergeordneter Ordner\Ordner -- Name \Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext
:: A B C D E F G H I
:: x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext
:: A B C H F G I
Set InFile=D:\Test\2010-05\26\test.txt
For /f "Tokens=1-9 delims=#\" %%A in (
'sed -n "s| -- |#|gp" "%InFile%"'
) Do Echo %%A\%%B\%%C\%%H -- %%F -- %%G%%I
Gruß
LotPings
Upps, wenn man eine Hilfsvariable benutzt, sollte man die auch einsetzen

Hallo datasette,
mein Fehler nicht ausdrücklich darauf hingewiesen zu haben, das es sich bei
Man kann die Ersetzung auch in ener Subroutine erledigen, was die Verarbeitung aber auch verlangsamt und etwas mehr Kodieraufwand erfordert.
Bei deinem obigen Soll ist unklar, welches Datum du übernehmen willst.
Bei dem von mir benutzten Sed handelt es sich um:
Die Version kann man sich hier herunterladen,
Dies is der direkte Download-Link.
Gruß
LotPings
mein Fehler nicht ausdrücklich darauf hingewiesen zu haben, das es sich bei
sed
um ein auf Windows portiertes GNU-Tool handelt.Man kann die Ersetzung auch in ener Subroutine erledigen, was die Verarbeitung aber auch verlangsamt und etwas mehr Kodieraufwand erfordert.
Bei deinem obigen Soll ist unklar, welches Datum du übernehmen willst.
Bei dem von mir benutzten Sed handelt es sich um:
>sed --version
GNU sed version 4.1.2
Copyright (C) 2003 Free Software Foundation, Inc.
Dies is der direkte Download-Link.
Gruß
LotPings

Hallo datasette,
es war noch eine Frage offen bevor ich deine geänderte Anforderung berücksichtige.
Ein paar realistische Beispielszeilen wären auch nicht schlecht.
Gruß
LotPings
es war noch eine Frage offen bevor ich deine geänderte Anforderung berücksichtige.
Ein paar realistische Beispielszeilen wären auch nicht schlecht.
Gruß
LotPings

Moin datasette,
deine Antwort habe ich gestern aber nicht mehr mitbekommen
Wenn in der m3u ALLE Titel drin sein sollen, kannst du sie doch einfacher neu aufbauen?
Oder gibt es besondere Anforderungen in Bezug auf Auswahl, Reihenfolge?
Ich bin auch etwas verwirrt, jetzt sind doch wieder nur einfache Bindestriche mit Leerzeichen davor und dahinter?
Ich sprach auch von realitsischen Beispielen pm4 und m3p EWrweiterungen kenne ich nicht
Die &-Zeichen bedürfen in jedem Fall einer gesonderten Behandlung. Kommen ggfs auch noch <|> vor ?
Du hast im letzten Beispiel auch bei
Wenn deine Daten zu uneinheitlich sind, wirst du sie kaum automatisiert bearbeiten können.
Gruß
LotPings
deine Antwort habe ich gestern aber nicht mehr mitbekommen
Wenn in der m3u ALLE Titel drin sein sollen, kannst du sie doch einfacher neu aufbauen?
Oder gibt es besondere Anforderungen in Bezug auf Auswahl, Reihenfolge?
Ich bin auch etwas verwirrt, jetzt sind doch wieder nur einfache Bindestriche mit Leerzeichen davor und dahinter?
Ich sprach auch von realitsischen Beispielen pm4 und m3p EWrweiterungen kenne ich nicht
Die &-Zeichen bedürfen in jedem Fall einer gesonderten Behandlung. Kommen ggfs auch noch <|> vor ?
Du hast im letzten Beispiel auch bei
Discjockey Hans-Joachim 007
im Zielformat die 007
entfernt, was aber deinen bisherigen Angaben widerspricht.Wenn deine Daten zu uneinheitlich sind, wirst du sie kaum automatisiert bearbeiten können.
Gruß
LotPings

Zitat von @datasette:
Ich habe o.g. Beispiel mal bearbeitet und angepasst. Es ist von meiner Seite her egal , ob als Separator ein " --
", " - " oder " # " verwendet wird. In Abhängigkeit einer möglichen
Vereinfachung bei der Umsetzung könnte das jederzeit von mir angepasst werden.
Ich bin da ja auch nicht so pingelig, aber die Batch Datei die das verarbeiten soll schon ...Ich habe o.g. Beispiel mal bearbeitet und angepasst. Es ist von meiner Seite her egal , ob als Separator ein " --
", " - " oder " # " verwendet wird. In Abhängigkeit einer möglichen
Vereinfachung bei der Umsetzung könnte das jederzeit von mir angepasst werden.
Gehen wir in diesem Fall von oben dargestellten Beispiel aus -> LeerzeichenRAUTELeerzeichen
Erweiterung nun auch mit realistischem Bezug gesetzt. In Abhängigkeit des vorliegenden Formats.
Das &-Zeichen könnte zwecks Vereinfachung im gesamten Textfile temporär geg.ein anderes ersetzt werden;
die Zeichen <|> finden keine Verwendung.
Und das
Soweit so gut, der Erweiterung nun auch mit realistischem Bezug gesetzt. In Abhängigkeit des vorliegenden Formats.
Das &-Zeichen könnte zwecks Vereinfachung im gesamten Textfile temporär geg.ein anderes ersetzt werden;
die Zeichen <|> finden keine Verwendung.
Und das
007
ist versehentlich abhanden gekommen ;)For /f
Befehl ist ja, mit etwas Einarbeitung, auch nicht sooo schwer zu verstehen.Von Biber, bastla und Konsorten gibt es dazu reichlich Beispiele im Forum, wenn ich auch zugebe das es nicht immer einfach ist, die passenden Suchbegriffe zu wählen.
Ich verzichte jetzt mal darauf einen weiteren Aufguß zu schreiben
Wenn in der m3u ALLE Titel drin sein sollen, kannst du sie doch einfacher neu aufbauen?
Das würde bedeuten alle 3000+ Titel per Hand neu hinzuzufügen; oder war die Frage anders gemeint?Der einfachste Weg eine m3u zu erstellen ist, einen Dir Befehl in eine Datei umzuleiten.
Je nachdem, in welcher Kodierung dein Player die Dateinamen erwartet, muss in der Batch ggfs noch die Code Page umgestellt werden.
Dir /B /S /A-D x:\*.mp3 X:\*.m3u >Alle.m3u
Wenn du nicht ein ganzes Laufwerk sondern nur die Künstlerbuchstaben in der m3u haben willst, erstellt diese Batch sowohl eine Gesamt- als auch eine Buchstaben-m3u. (ungetestet)
@Echo off&Setlocal
:: Wenn die Umlaute in der erstellten m3u nicht passen,
:: testhalber die :: in der folgenen Zeile entfernen.
::Chcp 1252
Set "Basis=X:\K?nstler*"
Set "AllM3U=X:\Alle.m3u"
Type NUL >"%AllM3U%"
For /f "delims=" %%A in (
'Dir /B/AD "%Basis%" 2^>Nul '
) do Call :CreateM3U "%%~fA"
Goto :Eof
:CreateM3U ----------------------------------------------------------
PushD %1
Set "ThisM3U=%~1\%~nx1.m3u"
Type Nul >"%ThisM3U%"
For /f "delims=" %%B in (
'Dir /B/S/A-D *.mp3 *.m4a'
) Do Set "Song=%%B" & Call :AddSong
popd
Goto :Eof
:AddSong ------------------------------------------------------------
:: Ampersand maskieren
Set "Song=%Song:&=^&%"
>>"%AllM3U%" Echo.%Song%
>>"%ThisM3U%" Echo.%Song%
Goto :Eof
Gruß
LotPings
PS: die Laufwerksbuchstaben "X:" musst du natürlich anpassen.