klaus20
Goto Top

Zeichen suchen und in die nächste Zeile was kopieren

Hallo Forum, hätte mal wieder eine Frage an die Batch Profis.
Habe mir mehrere Playlisten erstellt und die immer im jeweiligen Verzeichnis abgespeichert.
Nun möchte ich die gerne im Haupt musikverzeichis ablegen und in der Playliste den Pfad ändern.

Bisherige Playliste:
#EXTINF:266,Alicia Keys - Why Do I Feel So Bad - Soul - Slow
Alicia Keys\Slow\Why Do I Feel So Bad - Alicia Keys - Soul .mp3
#EXTINF:165,Aretha Franklin - Natural Woman - Soul - Slow
Aretha Franklin\Slow\Natural Woman - Aretha Franklin - Soul .mp3

Ich möchte nach #EXTINF suchen und am nächsten Zeilenanfang zu den Pfad folgenden Zeichen einfügen --> Musik\

Wunschplayliste:
#EXTINF:266,Alicia Keys - Why Do I Feel So Bad - Soul - Slow
Musik\Alicia Keys\Slow\Why Do I Feel So Bad - Alicia Keys - Soul .mp3
#EXTINF:165,Aretha Franklin - Natural Woman - Soul - Slow
Musik\Aretha Franklin\Slow\Natural Woman - Aretha Franklin - Soul .mp3

Ich weiß nicht ob so was überhaupt geht ??
Eine andere Möglichkeit wäre nach den Interpreten zu suchen.
Habe für jeden Interpreten ein eigenes Verzeichnis.
Z.B.: Im Musikverzeichnis den ersten Interpreten auslesen und in den Playlisten den Namen mit Musik\Name ersetzen.
Habe nur leider keine Idee wie ich sowas realisieren kann.

Wäre schön wenn jemand von Euch dazu was einfällt.

Gruß Klaus

Content-ID: 628235

Url: https://administrator.de/contentid/628235

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

146707
146707 04.12.2020 aktualisiert um 11:09:42 Uhr
Goto Top
@echo off
set "datei=D:\playlist.txt"  
powershell -EP Bypass -C "(gc '%datei%') -replace '^([^#].*)','Musik\$1' | sc '%datei%'"  
Klaus20
Klaus20 04.12.2020 um 11:21:25 Uhr
Goto Top
@146707 - erst mal Danke für die Antwort.
Könntest Du mir bitte Deine Antwort etwas erläutern damit ich das nachvollziehen kann ??
146707
146707 04.12.2020 aktualisiert um 11:47:27 Uhr
Goto Top
Batch ruft PS auf und fügt vor alle Zeilen der Datei die nicht mit einer Raute beginnen deinen gewünschten String an und schreibt das ganze wieder zurück, nichts weltbewegendes.
Regular Expressions Tutorial
Macht dir auch jeder halbwegskomfortable Texteditor wie z.B. Notepad++ im Handumdrehen auch ohne irgendwelche Skripte.
Klaus20
Klaus20 04.12.2020 um 12:11:54 Uhr
Goto Top
@146707 - mache wohl noch einiges falsch ??
Habe zum testen habe zum testen das Verzeichnis Musik mit 2 Unterverzeichnisen (Interpreten) erstellt.
Die beiden Interpreten sind auch in der playlist.txt und in der playlist.m3u.

Inhalt Playlist.txt
38 Special
Aaron Neville

Inhalt playlist.m3u
#EXTM3U
#EXTINF:275,38 Special - Second Chance - Pop - Slow
38 Special\Slow\Second Chance - 38 Special - Pop .mp3
#EXTINF:157,Aaron Neville - Crazy Love-Van Morrison - R&B - Slow
Aaron Neville\Slow\Crazy Love-Van Morrison - Aaron Neville - R&B .mp3

* Bekomme folgende Meldung *
d:\Musik>test

d:\Musik>{\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
Das System kann den angegebenen Pfad nicht finden.

d:\Musik>{\*\generator Riched20 10.0.19041}\viewkind4\uc1
Das System kann den angegebenen Pfad nicht finden.

d:\Musik>\pard\sa200\sl276\slmult1\f0\fs22\lang7 @echo off\par
Das System kann den angegebenen Pfad nicht finden.

d:\Musik>set "datei=d:\\Musik\\playlist.txt"\par

d:\Musik>powershell -EP Bypass -C "(gc 'd:\\Musik\\playlist.txt') -replace '^([^#].*)','Musik\\$1' | sc 'd:\\Musik\\playlist.txt'"\par
sc : Das Eingabeobjekt kann an keine Parameter des Befehls gebunden werden, da der Befehl keine Pipelineeingaben
akzeptiert oder die Eingabe und deren Eigenschaften mit keinem der Parameter übereinstimmen, die Pipelineeingaben
akzeptieren.
In Zeile:1 Zeichen:67

back-to-top... ) -replace '^([^#].*)','Musik\\$1' | sc 'd:\\Musik\\playlist.txt'\par

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidArgument: (Musik\\38 Special:String) [Set-Content], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.SetContentCommand

sc : Das Eingabeobjekt kann an keine Parameter des Befehls gebunden werden, da der Befehl keine Pipelineeingaben
akzeptiert oder die Eingabe und deren Eigenschaften mit keinem der Parameter übereinstimmen, die Pipelineeingaben
akzeptieren.
In Zeile:1 Zeichen:67

back-to-top... ) -replace '^([^#].*)','Musik\\$1' | sc 'd:\\Musik\\playlist.txt'\par

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidArgument: (Musik\\Aaron Neville:String) [Set-Content], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.SetContentCommand


d:\Musik>}
Der Befehl "}" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
***
146707
146707 04.12.2020 aktualisiert um 12:37:20 Uhr
Goto Top
mache wohl noch einiges falsch ??
Definitiv ...
Du hast das Skript offensichtlich im RTF-Format oder sonst was abgespeichert. Also mach es richtig und speichere das als Plaintext ANSI in Notepad dann funktioniert das einwandfrei (hier getestet!)!
Klaus20
Klaus20 04.12.2020 um 12:51:14 Uhr
Goto Top
So nun klappt es erstmal (Hatte erst mal die Datei nur abgespeichert ohne auf die Codierung zu achten - wieder was dazugelertn) - Danke !!
Wie bekomme ich es nun hin daß allen Playlisten (*.m3u) die Interpreten mit Pfad (Musik\)und Interpret (Aaron Neville) ersetzt werden ??
146707
146707 04.12.2020 aktualisiert um 12:55:44 Uhr
Goto Top
Einfache ne Foreach Schleife ergänzen, kommt mal wieder alles nur tropfenweise hier ... Freitag halt 🐟
@echo off
set "Ordner=D:\DeinOrdner"  
powershell -EP Bypass -C "ls '%ordner%' -Filter *.m3u -File -Recurse | %%{(gc $_.Fullname) -replace '^([^#].*)','Musik\$1' | sc $_.Fullname}"  
Klaus20
Klaus20 04.12.2020 um 13:21:21 Uhr
Goto Top
Wieder etwas weiter. Es ist zwar "Musik\ " hinzugefügt worden aber leider einiges mehr.
Hast Du noch eine Idee ??

Orginal Datei:
#EXTM3U
#EXTINF:275,38 Special - Second Chance - Pop - Slow
38 Special\Slow\Second Chance - 38 Special - Pop .mp3
#EXTINF:157,Aaron Neville - Crazy Love-Van Morrison - R&B - Slow
Aaron Neville\Slow\Crazy Love-Van Morrison - Aaron Neville - R&B .mp3

Neue Datei:
Musik\{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
Musik\{\*\generator Riched20 10.0.19041}\viewkind4\uc1
Musik\\pard\sa200\sl276\slmult1\f0\fs22\lang7 #EXTM3U\par
#EXTINF:275,38 Special - Second Chance - Pop - Slow\par
Musik\38 Special\\Slow\\Second Chance - 38 Special - Pop .mp3\par
#EXTINF:157,Aaron Neville - Crazy Love-Van Morrison - R&B - Slow\par
Musik\Aaron Neville\\Slow\\Crazy Love-Van Morrison - Aaron Neville - R&B .mp3\par
Musik\}
Musik\
146707
Lösung 146707 04.12.2020 aktualisiert um 15:29:46 Uhr
Goto Top
Kann ich dir sagen warum, deine angeblichen *.M3U Dateien sind keine "echten" Textdateien sondern RTF-Dateien mit Formatierungsanweisungen, d.h. dort bestehen Zeichen zum Großteil aus Escape-Sequenzen Kauderwelsch, einfach mal nachschlagen dann verstehst du warum => https://de.wikipedia.org/wiki/Rich_Text_Format! Da hat wohl wieder ein Noob mit Wordpad rum gespielt ... Wie ich schon sagte Freitaaaag 🐟. Benutze einen vernünftigen Editor oder konvertiere die RTF-Dateien in Plaintext dann geht das auch wie gewünscht.

Ich bin jetzt raus.
Klaus20
Klaus20 04.12.2020 um 18:45:57 Uhr
Goto Top
@146707
Dank Deiner Hilfe habe ich mittlerweile 200 Playlisten angepasst und einiges gelernt - Nochmals vielen Dank für Deine Hilfe und Geduld.

Gruß Klaus
146707
Lösung 146707 07.12.2020 um 11:37:22 Uhr
Goto Top
Schön. Dann bitte auch den Beitrag als gelöst markieren. Thanks.
Klaus20
Klaus20 07.12.2020 um 12:45:33 Uhr
Goto Top
Mach ich gerne - nur wie ?
146707
Lösung 146707 07.12.2020 um 13:00:28 Uhr
Goto Top
Zitat von @Klaus20:

Mach ich gerne - nur wie ?
Hast du gerade getan (siehst du an den grünen "gelöst" Schildchen).