Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Dateipfade innerhalb einer Textdatei ähnlich wie ID3-Tags behandeln und neu arrangieren

Frage Entwicklung Batch & Shell

Mitglied: datasette

datasette (Level 1) - Jetzt verbinden

26.05.2010, aktualisiert 12:23 Uhr, 3232 Aufrufe, 13 Kommentare

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
Mitglied: Biber
26.05.2010 um 13:18 Uhr
Moin datasette,

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
Bitte warten ..
Mitglied: LotPings
26.05.2010 um 13:57 Uhr
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.

01.
@Echo off 
02.
:: x:\Übergeordneter Ordner\Ordner -- Name \Dateiautor -- Schaffenswerk -- Nummer -- [Datum].ext 
03.
:: A  B                     C         D     E             F                G          H      I 
04.
:: x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext 
05.
:: A  B                     C      H        F                G      I 
06.
Set InFile=D:\Test\2010-05\26\test.txt 
07.
For /f "Tokens=1-9 delims=#\[]" %%A in ( 
08.
  'sed -n "s| -- |#|gp" "%InFile%"' 
09.
    ) Do Echo %%A\%%B\%%C\%%H -- %%F -- %%G%%I
Gruß
LotPings

Upps, wenn man eine Hilfsvariable benutzt, sollte man die auch einsetzen
Bitte warten ..
Mitglied: datasette
26.05.2010 um 14:18 Uhr
Hallo Biber,

danke fürs willkommen heißen =)

Es sind in der Tat ggf. Einfachbindestriche und Zeichen wie z.B. Komma und/oder "&" in der Namensgebung aller "Objekte?" möglich. Also sowohl in "Übergeordneter Name" als auch in "Dateiautor".
Und ebenfalls ist es möglich, das die oben dargestellten Objekte wie "Schaffenswerk" und/oder "Dateiautor" aus mehreren Worten bestehen können.

Vollkommen korrekt!

An dieser Stelle vielleicht vorsichtshalber nochmal die exakte alte Pfadstruktur:

x:\Übergeordneter Ordner\Ordner -- Name [Jahrtausend]\Dateiautor -- Schaffenswerk [Jahrtausend] -- zweistellige Nummer -- Teilkunstwerk.ext

und wie es nach der Neuordnung dargestellt werden müsste:

x:\Übergeordneter Ordner\Ordner\Jahrtausend - Schaffenswerk - zweistellige Nummer.ext


Wobei es nicht wirklich von Relevanz wäre, wenn die Ausgabe wieder mittels Doppelstrich realisiert werden würde. Das lässt sich denke recht problemlos
im nachhinein mittels "Ersetzen" abändern. Also nach der Ausgabe wurden Wörter/Objekte umgeordnet und Objekte bestimmter Positionen fallen gänzlich
weg.

Hehe, oh mann. Ich hoffe nach wie vor nicht durcheinander zu bringen oder irgendwie in die Irre zu führen...

Danke jedenfalls recht herzlich für dein Entgegenkommen Biber,

Grüße,

datasette =]
Bitte warten ..
Mitglied: datasette
28.05.2010 um 09:39 Uhr
So, endlich Wochenende ;)

Hi LotPings und herzlichen Dank für deine Mühe hinsichtlich eines Lösungsvorschlags. Irgendwie komme ich mit der Anwendung des Quelltextes nicht so zurecht. Ich habe diesen 1:1 in eine Textdatei kopiert und als .bat abgespeichert. Nachdem ich die Datei ausführe erscheint die Ausgabe, dass die Umgebungsvariable -n "s| -- |#|gp" "%InFile%" nicht definiert ist; jedoch nur wenn ich sed in set abändere. Bei Verwendung mit d erscheint "Befehl falsch geschrieben oder nicht gefunden". Der Pfad zur Textdatei ist entsprechend angepasst. Auch meine Versuche Einfluss auf den Quelltext zu nehmen brachten (wie hätte es anders sein können) keinen Erfolg.

Vielleicht könntest Du in einer freien Minute bitte nochmal den Code ohne " -- " als Separator angleichen und die von Dir verwendete Raute "#" einbauen. Diesbezüglich müsste ich nur die zu bearbeitende Textdatei anpassen indem ich -- durch # ersetzen lasse. Wenn ich den Quelltext richtig deute, dann wäre die "fehlerhafte" Zeile nicht mehr notwendig oder?

Im Übrigen hier vielleicht nochmal der korrekte Pfad:

[IST] x:\Übergeordneter Ordner\Ordner -- Name [Datum]\Dateiautor -- Schaffenswerk [Datum] -- Nummer -- Titel.ext

[SOLL] x:\Übergeordneter Ordner\Ordner\Datum -- Schaffenswerk -- Nummer.ext


Bitte einfach nachhaken sollte es noch an Infos fehlen =)


Grüße,

datasette
Bitte warten ..
Mitglied: LotPings
28.05.2010 um 09:56 Uhr
Hallo datasette,
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.
Die Version kann man sich hier herunterladen,
Dies is der direkte Download-Link.

Gruß
LotPings
Bitte warten ..
Mitglied: datasette
31.05.2010 um 09:08 Uhr
Hallöchen,

und danke nochmals für die Mühe!

Leider kann ich mit dem Lösungsvorschlag nicht wirklich was anfangen. Habe mir die Lösung ein wenig einfacher vorgestellt. Möglicherweise habe ich eine Lösung für mein Problem mittels einer Software gefunden. Muss mich die Tage mal damit auseinandersetzen und dann weitersehen...


Liebe Grüße,

datasette =]
Bitte warten ..
Mitglied: datasette
31.05.2010 um 23:36 Uhr
Falls noch jemand ein Lösungsvorschlag für einen DAU anzubieten hat, bin ich gerne offen dafür. Die Softwarevariante hat mir leider auch nicht weitergeholfen /

Grüße,

datasette
Bitte warten ..
Mitglied: LotPings
31.05.2010 um 23:49 Uhr
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
Bitte warten ..
Mitglied: datasette
01.06.2010 um 00:17 Uhr
Hui, da is ja noch jemand wach

Ok, ich versuch mein Bestes; demnach hier der Versuch eines eindeutigen, realistischen Pfads:

x:\Künstler - H\Discjockey Hans-Joachim 007 # Kratzartistik [1988]\Discjockey Hans-Joachim 007 # Kratzartistik [1988] # 01 # Kratzen Bis Der Arzt Kommt.mp3
x:\Künstler - H\Discjockey Hans-Joachim 007 # Kratzartistik [1988]\Discjockey Hans-Joachim 007 # Kratzartistik [1988] # 02 # Rap Schlagbox.mp3
x:\Künstler - H\Discjockey Hans-Joachim 007 # Kratzartistik [1988]\Discjockey Hans-Joachim 007 # Kratzartistik [1988] # 03 # Em Ce Jodel.mp3
...
x:\Künstler - K\Klaus Power & Seine Freunde # Schlager Haus Party 5 [1961]\Klaus Power & Seine Freunde # Schlager Haus Party 5 [1961] # 01 # Schunkelaffäre.m4a
x:\Künstler - K\Klaus Power & Seine Freunde # Schlager Haus Party 5 [1961]\Klaus Power & Seine Freunde # Schlager Haus Party 5 [1961] # 02 # Gabi 'Granate' Gäbel's Scratch (Extended Version).m4a
x:\Künstler - K\Klaus Power & Seine Freunde # Schlager Haus Party 5 [1961]\Klaus Power & Seine Freunde # Schlager Haus Party 5 [1961] # 03 # Rappelkisten-Blues.m4a
...

Ausgabe:

x:\Künstler - H\Discjockey Hans-Joachim 007\1988 # Kratzartistik # 01.mp3
x:\Künstler - H\Discjockey Hans-Joachim 007\1988 # Kratzartistik # 02.mp3
x:\Künstler - H\Discjockey Hans-Joachim 007\1988 # Kratzartistik # 03.mp3
...
x:\Künstler - K\Klaus Power & Seine Freunde\1961 # Schlager Haus Party 5 # 01.m4a
x:\Künstler - K\Klaus Power & Seine Freunde\1961 # Schlager Haus Party 5 # 02.m4a
x:\Künstler - K\Klaus Power & Seine Freunde\1961 # Schlager Haus Party 5 # 03.m4a

Folgender Hintergrund; nachdem ich dem größten Teil meiner digitalisierten Schallplatten und MC Sammlung ID3-Tags verpasst habe und die Ordnerstruktur dahingehend
abgeändert habe stehe ich vor dem Problem eine nahezu unbrauchbare m3u-Playlist mit über 3000 Titeln/Dateipfaden zu haben. Da ich nicht jeden Pfad einzelnd anfassen
wollte dachte ich an eine komfortablere Lösung mittels Software...

Zu Deiner Frage mit dem Datum wird ersichtlich, das dies stets identisch ist.

Was vergessen?? ... wenn ja, dann einfach bemängeln =)


Grüße
Bitte warten ..
Mitglied: LotPings
01.06.2010 um 10:00 Uhr
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 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
Bitte warten ..
Mitglied: datasette
01.06.2010 um 23:51 Uhr
Hehe, hallöle!

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 -> LeerzeichenRAUT ELeerzeichen
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 ;)

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?

Grüße,
datesette =)
Bitte warten ..
Mitglied: LotPings
03.06.2010 um 12:56 Uhr
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 ...

Gehen wir in diesem Fall von oben dargestellten Beispiel aus -> LeerzeichenRAUT ELeerzeichen
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 ;)
Soweit so gut, der 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?
Ja, das war es
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)
01.
@Echo off&Setlocal 
02.
:: Wenn die Umlaute in der erstellten m3u nicht passen,  
03.
:: testhalber die :: in der folgenen Zeile entfernen. 
04.
::Chcp 1252 
05.
Set "Basis=X:\K?nstler*" 
06.
Set "AllM3U=X:\Alle.m3u" 
07.
Type NUL >"%AllM3U%" 
08.
For /f "delims=" %%A in ( 
09.
  'Dir /B/AD "%Basis%" 2^>Nul ' 
10.
    ) do Call :CreateM3U "%%~fA" 
11.
Goto :Eof 
12.
:CreateM3U ---------------------------------------------------------- 
13.
PushD %1 
14.
Set "ThisM3U=%~1\%~nx1.m3u" 
15.
Type Nul >"%ThisM3U%" 
16.
For /f "delims=" %%B in ( 
17.
  'Dir /B/S/A-D *.mp3 *.m4a' 
18.
    ) Do Set "Song=%%B" & Call :AddSong 
19.
popd 
20.
Goto :Eof 
21.
:AddSong ------------------------------------------------------------ 
22.
:: Ampersand maskieren 
23.
Set "Song=%Song:&=^&%" 
24.
>>"%AllM3U%"  Echo.%Song% 
25.
>>"%ThisM3U%" Echo.%Song% 
26.
Goto :Eof
Gruß
LotPings
PS: die Laufwerksbuchstaben "X:" musst du natürlich anpassen.
Bitte warten ..
Mitglied: datasette
12.06.2010 um 16:43 Uhr
Hallöchen LotPings!

Ich wollte abschließend hierzu sagen, das ich nach etwas Fummelei eine für meine Zwecke geeignete
Lösung mittels Excel ausgetüftelt habe. Zwar habe ich dadurch ein wenig Nacharbeiten, aber diese sind
harmlos im Vergleich zur Vorstellung, die komplette Liste per Hand zusammenzustellen.

Danke vielmals an dieser Stelle für Deine Mühe und Deine Hilfsbereitschaft LotPings =]

...und ein schönes Wochenende gewünscht,

datasette
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Powershell - In Textdatei suchen und ersetzen

Frage von Raaja89 zum Thema Batch & Shell ...

Server-Hardware
gelöst Domäne neu einrichten (5)

Frage von DerNeueITler zum Thema Server-Hardware ...

Off Topic
gelöst Neu Gerät privat gekauft - Hersteller verweigert Gewährleistung (9)

Frage von pelzfrucht zum Thema Off Topic ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...