boehli
Goto Top

.m3u Pfade auslesen und kopieren

Hallo Zusammen,

und zwar kleines Problem doch irgendwie will es nicht ;)
Batch liest mit einer for schleife aus einer .m3u(Winamp Playlist File) die Pfade aus(c:\relax.m3u) und soll diese nach (c:\mp3\) kopieren.
Ich glaube das Problem ist einfach das die Pfade die darin enthalten sind leerzeichen enthalten.
Weil die dateien die keine enthalten werde nämlich kopiert.

Also wie erweiter ich meine batch, dass das funktioniert ?

FOR /f %%f IN (c:\relax.m3u) DO copy /b %%f "c:\mp3\"


Danke

Content-ID: 55867

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

Ausgedruckt am: 20.11.2024 um 08:11 Uhr

bastla
bastla 04.04.2007 um 18:09:07 Uhr
Goto Top
Hallo boehli und willkommen im Forum!

Versuch es so:
FOR /f "delims=" %%f IN (c:\relax.m3u) DO copy /b "%%f" "c:\mp3\"  

HTH
bastla
boehli
boehli 04.04.2007 um 18:18:20 Uhr
Goto Top
wies einfach funktioniert... Danke

mhh willstes mir erkl
bastla
bastla 04.04.2007 um 18:23:53 Uhr
Goto Top
Hallo boehli!

In Batch gelten zB Leerstelle und Tab standardmäßig als Trennzeichen (siehe "for /?"). Durch die Angabe von "delims=" kann dieses Trennzeichen geändert werden - wenn ich dabei keines angebe (nach dem "=" und vor dem Anführungszeichen steht ja nichts mehr), wird auch nicht getrennt.

Damit hast Du den Pfad/Dateinamen aus der Liste herausbekommen - damit nicht beim "copy"-Befehl gleich wieder die Leerstellen zum "Auseinanderreißen" des Namens führen, wird dieser unter Anführungszeichen gesetzt und damit zusammengehalten.

Grüße
bastla
pulse
pulse 04.04.2007 um 18:30:40 Uhr
Goto Top
Hey, sowas hab ich schon ne weile gesucht!
kannste mir die fertige batch dann mal schicken?^^
Nur würd ich gerne wissen wie er das in dem kompletten ordner machen kann.
Biber
Biber 04.04.2007 um 18:38:02 Uhr
Goto Top
Moin Endzeit,

der komplette Oneliner steht doch schon oben?
Und den letzten Teil der Frage: "Nur w*rd ich gerne wissen wie er das in dem kompletten ordner machen kann." ...kannst Du das bitte ein wenig umformulieren?

Ich versteh es zumindest nicht, aber wenn es zu dem beliebten Thema "Playlist ummuddeln" gehoert, dann sollten wir es ruhig hier behandeln.

Danke
Biber
pulse
pulse 04.04.2007 um 18:47:46 Uhr
Goto Top
Und zwar habe ich in meinen Playlisten immer die Pfade "D:\Eigene Dateien\Eigene Musik\
und dann Unterordner "Alben\Interpret\Albenname\"
und die Playlisten liegen im Ordner "Playlisten".
Nun würd ich gern den Pfad, der automatisch eingetragen wird,
per Batch abändern.
und zwar "D:\Eigene Dateien\Eigene Musik\" in "..\"
Damit es relativ ist und ich nicht immer den gleichen Spaß habe, wenn ich mich z.b. entscheide,
den ordner zu verschieben...dann stimmen die Pfade nicht mehr, ist ja auch logisch face-smile
Hoffe das war eine ausreichende Beschreibung face-smile
Biber
Biber 04.04.2007 um 19:14:59 Uhr
Goto Top
Na ja, wenns weiter nichts ist...

Wenn Deine .m3u Datei also xx.m3u heisst, dann am CMD-Prompt diese eine Zeile eingeben...
for /f "delims=" %i in (xx.m3u) do @for /f "delims=\ tokens=3,*" %j in ("%i") do @echo ..\%k  
wenn das am Bildschirm angezeigte Ergebnis passt, dann noch ein ">>NeueRelativPfadPlaylist.m3u" anhaengen.

Gruss
Biber
P.S. Auch wenn heute zwei Code-Zeilen angezeigt werden - es ist eine.
pulse
pulse 04.04.2007 um 19:36:04 Uhr
Goto Top
also ich wollte eigentlich, dass die batchfile alle dateien durchgeht und in jeder datei schaut ob da die bestimmte Zeichenkette vorhanden is und diese gegebenenfalls ersetzt.
Biber
Biber 04.04.2007 um 22:37:32 Uhr
Goto Top
*seufz*

Dann wickeln wir halt noch ein FOR-Schleifchen drum, was soll's...
Wechseln/Ersetzen per Batch geht nicht sinnvoll.
Von daher mein Vorschlag: zu jeder vorhandenen Playlistxxx.m3u wird im selben Verzeichnis eine PlaylistxxxRELPATH.m3u angelegt.

Dann brauchen wir nicht extra einen Mehrzeiler schreiben.
Am CMD-Prompt (ist wieder eine! Zeile):
for /r "c:\Eigene Dateien\Eigene Musik" %f in (*.m3u) do @for /f "usebackq delims=" %i in ("%f") do @for /f "delims=\ tokens=3,*" %j in ("%i") do @echo ..\%k  
>> "%~dpnfRELPATH%~xf"  

Wenn Dir der Einzeiler zu lang zum Eintippseln ist, dann sieht der als (formatierter) Batch-Oneliner so aus:
@FOR /R "c:\Eigene Dateien\Eigene Musik" %%f IN (*.m3u) do @(  
       FOR /F "usebackq delims=" %%i in ("%%f") do @(  
           FOR /F "delims=\ tokens=3,*" %%j in ("%%i") do @echo ..\%%k >> "%%~dpnfRELPATH%%~xf"  
     ))
...wobei Du natürlich auch den ersten FOR /R -Startverzeichnisparameter ("c:\Eigene Dateien\Eigene Musik") ersetzen könntest durch ein %1 und dann den Startpfad als Parameter mitgibst.

Gruss
Biber
[Edit]
Wenn natürlich alle .m3u's direkt im Verzeichnis "....\Eigene Musik" liegen, dann reicht
statt jetzt: @for /R "c:\Eigene Dateien\Eigene Musik" %%f IN (*.m3u) DO ....lala
NEU dieses: @for %%f IN ("c:\Eigene Dateien\Eigene Musik\*.m3u") DO....lala
[/Edit]
Biber
Biber 08.04.2007 um 19:43:46 Uhr
Goto Top
Moin boehli und Endzeit,

Nachfrage:
die eigentliche Frage von boehli betrachte ich als beantwortet.
Was macht Deine Ergänzungsanfrage, @endzeit? Schon irgendetwas davon ausprobiert?

Gruss
Biber
pulse
pulse 11.04.2007 um 21:27:32 Uhr
Goto Top
Also ich danke dir erstmal für deine Antwort,
aber ich glaube ich werde mich erstmal mit Batch auseinandersetzen.
Will ja auch verstehen was da passiert,
und nicht nur dass es funktioniert face-smile
Aber ich werd mir deine Beitrag speichern und darauf aufbauen.
Biber
Biber 11.04.2007 um 21:47:28 Uhr
Goto Top
Danke für die Rückmeldung, Endzeit,

dann mache ich diesen Beitrag erstmal dicht.
Was auf keinen Fall heißen so, dass ich von Dir oder von Playlisten oder FOR-Anweisungen nie wieder etwas lesen will.

Wenn es also bei Deinem konkreten Problem auch nach Auseinandersetzung mit dem Thema "Batch" noch klemmen sollte, dann eröffne einen neuen Thread in "Batch & Shell".
You're welcome. face-wink

Grüße
Biber