Playliste *.pls mit bat erstellen
Hi@all
Ich möchte mit einer Batch Datei eine Playliste erstellen. Allerdings nicht nur eine, denn dann könnte ich es ja von hand. Es sollte in jeden MP3-Ordner eine Playliste erstellt werden, die in dem und in dem unterordner sind...
Soweit bin ich bis jetzt:
echo [playlist] >playlist\playlisttest.pls
set /a counter=1
for /R . %%i in (*.mp3) do (
echo File%counter%=%%i >>playlist\playlisttest.pls
set /a counter="%counter%+1"
)
Und so sollte das File nacher aussehen:
[playlist]
NumberOfEntries=1
File1=D:\Eigene Musik\Chillout\Summersurf\Longboarding\Dick Dale - King Of The Surf Guitar.mp3
Title1=Dick Dale - King Of The Surf Guitar
Playlist ist ja statisch. Also kein Problem
NumberOfEntries=1 ist ja nach den anzahl Files abgestimmt. 1. Problem
File1=Titel stellt für mich ein Problem dar, da er in meinem Skript oben die Variable counter nicht hochzählt
Title1=Titel stellt für mich auch ein Problem dar, da es ja einfach den Filenamen ohne das MP3 ist. Wenn das nicht geht, dann kann das MP3 am schluss auch bleiben...
Ich hoffe ihr versteht mein Problem... Kann mir jemand helfen, oder ist das nicht möglich ?
Gruss Böby
Ich möchte mit einer Batch Datei eine Playliste erstellen. Allerdings nicht nur eine, denn dann könnte ich es ja von hand. Es sollte in jeden MP3-Ordner eine Playliste erstellt werden, die in dem und in dem unterordner sind...
Soweit bin ich bis jetzt:
echo [playlist] >playlist\playlisttest.pls
set /a counter=1
for /R . %%i in (*.mp3) do (
echo File%counter%=%%i >>playlist\playlisttest.pls
set /a counter="%counter%+1"
)
Und so sollte das File nacher aussehen:
[playlist]
NumberOfEntries=1
File1=D:\Eigene Musik\Chillout\Summersurf\Longboarding\Dick Dale - King Of The Surf Guitar.mp3
Title1=Dick Dale - King Of The Surf Guitar
Playlist ist ja statisch. Also kein Problem
NumberOfEntries=1 ist ja nach den anzahl Files abgestimmt. 1. Problem
File1=Titel stellt für mich ein Problem dar, da er in meinem Skript oben die Variable counter nicht hochzählt
Title1=Titel stellt für mich auch ein Problem dar, da es ja einfach den Filenamen ohne das MP3 ist. Wenn das nicht geht, dann kann das MP3 am schluss auch bleiben...
Ich hoffe ihr versteht mein Problem... Kann mir jemand helfen, oder ist das nicht möglich ?
Gruss Böby
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 41719
Url: https://administrator.de/contentid/41719
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
30 Kommentare
Neuester Kommentar
so gehts:
die variable 'counter' ist in der schleife nicht gueltig, sondern nur in der aufgerufenen funktion. hatte das prob auch schon, weiss nicht, ob man es evtl. noch "besser" loesen kann.
Esco
set Pfad=D:\meinMP3Pfad
set playlist=playlisttest.txt
echo [playlist] >%playlist%
set counter=1
for /R %Pfad% %%i in (*.mp3) do (call:[WriteData] "%%i")
pause
goto:eof
:[WriteData]
echo File%counter%=%~1 >>%playlist%
set /A counter+=1
die variable 'counter' ist in der schleife nicht gueltig, sondern nur in der aufgerufenen funktion. hatte das prob auch schon, weiss nicht, ob man es evtl. noch "besser" loesen kann.
Esco
Moin Böby,
vielleicht so:
Gruß
Biber
vielleicht so:
::--MakePlaylist.bat [ungetestete Skizze]
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\playlisttest.pls"
set /a counter=1
for /R . %%i in (*.mp3) do set /a counter+=1
echo [playlist] >%pls%
echo NumberOfEntries=%counter%>>%pls%
set /a counter=1
for /R . %%i in (*.mp3) do (
echo File!counter!=%%i>>%pls%
echo Title!counter!=%%~ni>>%pls%
set /a counter+=1
)
Gruß
Biber
Was bedeutet das "%%~ni" in der Zeile :
echo Title!counter!=%%~ni>>%pls%
echo Title!counter!=%%~ni>>%pls%
Diese Schreibweise [%%~ni] bedeutet soviel wie nur den Namensteil der Datei in Zählvariable %%i.
wobei
%%~ni = Datei-Name von Datei in %%i
%%~xi = Extension von Datei in %%i
%%~dpi = Drive und Path von Datei in %%i
...etc. Siehe unter SET /? oder FOR /?
Ist es möglich das ä,ö,ü auch so übernommen werden ?
Dafür steht jetzt ein Sonderzeichen, wie :
Ja, meistens... Du musst Die Codepages synchronisieren (die Windows-CP 1252 und die CMD-CP von 850)Dafür steht jetzt ein Sonderzeichen, wie :
Meist klappt es mit dem Befehl "CHCP 1252" am Anfang des Batches.
Siehe unter CHCP /?
Gruß
Biber
Dazu würde ich in dem Playlist-Maker.bat selbst anpassen:
...damit der Batch zwei Parameter annehmen kann:
Parameter %1 = Ordnerebene, z.B "ChillOut" [Unterhalb von "c:\Eigene Musik"]
Parameter %2 = Voller Verzeichnisname "c:\Eigene Musik\ChillOut"
Aufruf dann mit (vom CMD-Prompt aus und im Verzeichnis "Eigene Musik" stehend)
[denn dafür lohnt kein Batch... falls doch: bei allen Zählvariablen ein %-Zeichen mehr:
HTH Biber
[Edit] Richtig gedacht, aber schlampig getippt.
Parameterfehler - der 2 Parameter muss nicht "%%~dpi" heißen, sondern als vollständiger Pfad natürlich "%%~dpnxi". Siehe unten. [/Edit]
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls"
set /a counter=1
for /R "%~2" %%i in (*.mp3) do set /a counter+=1
...
Parameter %1 = Ordnerebene, z.B "ChillOut" [Unterhalb von "c:\Eigene Musik"]
Parameter %2 = Voller Verzeichnisname "c:\Eigene Musik\ChillOut"
Aufruf dann mit (vom CMD-Prompt aus und im Verzeichnis "Eigene Musik" stehend)
for /d %i in (*.*) do Playlist-Maker.bat %~nxi "%~dpi"
for /d %%i in (*.*) do Playlist-Maker.bat %%~nxi "%%~dpi"
HTH Biber
[Edit] Richtig gedacht, aber schlampig getippt.
Parameterfehler - der 2 Parameter muss nicht "%%~dpi" heißen, sondern als vollständiger Pfad natürlich "%%~dpnxi". Siehe unten. [/Edit]
Sorry, Böby,
da waren noch mehr "doppelte" Zeilen drin...
Hier noch mal am Stück:
Das "CHCP 1252" kannst, aber musst Du nicht jedesmal setzen.
Gib das lieber einmalig ein vor dem Aufruf des Batches.
Mal sehen, ob es nun besser passt.
da waren noch mehr "doppelte" Zeilen drin...
Hier noch mal am Stück:
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls"
set /a counter=0
for /R "%~2" %%i in (*.mp3) do set /a counter+=1
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%]
echo [playlist] >%pls%
echo NumberOfEntries=%counter%>>%pls%
set /a counter=1
for /R "%~2" %%i in (*.mp3) do (
echo File!counter!=%%i>>%pls%
echo Title!counter!=%%~ni>>%pls%
set /a counter+=1
)
Das "CHCP 1252" kannst, aber musst Du nicht jedesmal setzen.
Gib das lieber einmalig ein vor dem Aufruf des Batches.
Mal sehen, ob es nun besser passt.
Also, noch ein Missverständnis,
falls in der Datei "start-playlist-maker.bat" der Aufruf so wie oben in meinem letzten Kommentar steht, wird es nicht klappen - dieser Aufruf war vom CMD-Prompt gemeint.
Nochmal als Batchdatei, die irgendwo gespeichert sein mag:
Bei der "gerufenen" Datei "Playlist-Maker.bat" ist keine Pfadangabe dabei, die wird also explizit in "c:\Eigene Musik" erwartet.
[Hoffentlich ist bald Dienstag,,,]
falls in der Datei "start-playlist-maker.bat" der Aufruf so wie oben in meinem letzten Kommentar steht, wird es nicht klappen - dieser Aufruf war vom CMD-Prompt gemeint.
Nochmal als Batchdatei, die irgendwo gespeichert sein mag:
:: ----snipp Start-Playlist-Maker.bat
@echo off
CHCP 1252>nul
PushD "c:\Eigene Musik"
for /d %%i in (*.*) do Playlist-maker.bat %%~nxi "%%~dpnxi"
PopD
Bei der "gerufenen" Datei "Playlist-Maker.bat" ist keine Pfadangabe dabei, die wird also explizit in "c:\Eigene Musik" erwartet.
[Hoffentlich ist bald Dienstag,,,]
Na gut,
das eine machen wir noch vor Dienstag...
Und in der aufgerufenen Datei Playlist-maker.bat:
die Variable %pls% [die Playlist-Datei] überall da, wo sie nach einem ">" bzw. ">>" steht, auch in Komma einschließen [also: echo bla - ...>>"%pls%"
Bevor wir das rekursive Gedöns machen, brauch ich erstmal einen Milkshake oder so was...
Wir sehen uns ja noch.... muss ja nicht heute sein.
Gruß
Biber
das eine machen wir noch vor Dienstag...
Wie mach ich das, dass er Ordner mit Abstände auch annimmt ?
:: ----snipp Start-Playlist-Maker.bat
@echo off
CHCP 1252>nul
PushD "c:\Eigene Musik"
for /d %%i in (*.*) do Playlist-maker.bat "%%~nxi" "%%~dpnxi"
PopD
Und in der aufgerufenen Datei Playlist-maker.bat:
die Variable %pls% [die Playlist-Datei] überall da, wo sie nach einem ">" bzw. ">>" steht, auch in Komma einschließen [also: echo bla - ...>>"%pls%"
Bevor wir das rekursive Gedöns machen, brauch ich erstmal einen Milkshake oder so was...
Wir sehen uns ja noch.... muss ja nicht heute sein.
Gruß
Biber
Nochmal am Stück:
Der aufgerufene Batch Playlist-Maker.bat
Gruß
Biber
::---snipp startPlaylist-maker.bat
@echo off
CHCP 1252>nul
REM Hier will ich nur die Verzeichnisebene direkt unter "c:\Eigene Misik" abfackeln
PushD "c:\Eigene Musik"
REM Sowohl Ordner in dieser Verzeichnisebene darunter können Leerzeichen enthalten ["Hip Hop from Moldavia"]
REM und IMMER die Verzeichnisnamen im gesamten Pfad ["C:\Eigene Musik\Blasmusik"]
REM Also beiede Parameter IMMER in Anführungszeichen.
for /d %%i in (*.*) do "c:\eigene Musik\Playlist-maker.bat" "%%~nxi" "%%~dpnxi"
REM und dem aufgerufenen Batch habe ich jetzt eine Pfadangabe verpasst... ist sonst zu unsicher.
PopD
:: ---snipp Playlist-maker.bat:
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%~1.pls"
REM Parameter1 und Parameter2 können beide in Anführungszeichen kommen- also mit "%~1"/"%~2" Anfü-Zeichen wegfiltern
set /a counter=0
for /R "%~2" %%i in (*.mp3) do set /a counter+=1
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%]
echo [playlist] >"%pls%"
echo NumberOfEntries=%counter%>>"%pls%"
set /a counter=1
for /R "%~2" %%i in (*.mp3) do (
echo File!counter!=%%i>>"%pls%"
echo Title!counter!=%%~ni>>"%pls%"
set /a counter+=1
)
Gruß
Biber
Moin, Böby,
da würde ich nicht so viel Heckmeck machen..
Oben in Deinen Start-Playmaker.bat steht ja der Aufruf für die Ebene "c:\Eigene Musik".
Der Aufruf für eine Ebene tiefer wäre entsprechend (am CMD-Prompt):
Noch eine Ebene tiefer:
Lässt sich sicherlich auch kürzer schreiben, aber... so läuft es.
Gruß
Biber
da würde ich nicht so viel Heckmeck machen..
Oben in Deinen Start-Playmaker.bat steht ja der Aufruf für die Ebene "c:\Eigene Musik".
Der Aufruf für eine Ebene tiefer wäre entsprechend (am CMD-Prompt):
>for /d %i in ("C:\Eigene Musik\*.*") do @for /d %j in ("%i\*.*") do @playlist-maker "%~nxj" "%j"
>for /d %i in ("C:\Eigene Musik\*.*") do @for /d %j in ("%i\*.*") do @for /d %k in ("%i\*.*") do @playlist-maker "%~nxk" "%k"
Lässt sich sicherlich auch kürzer schreiben, aber... so läuft es.
Gruß
Biber
So, Böby,
nach den ganzen Irrwegen, Missverständnissen und Tippfehlern nochmal das Erhaltenswerte als ein Batch.
Gruß
Biber
[Hoffentlich letztes Edit]
Ich habe den Schnipsel, nachdem ich es doch mal getestet habe, noch geringfügig angepasst.
a) Tippfehlerberichtigung. Thx Böby noch mal.
b) Schönheitsfehler 1: die Variable "%~dp2%" im Arbeits-Block hat schon einen abschließenden "\".
Daher reicht ein Backslah in set "pls=%~dp2%~1\%~1.pls".
Sonst sind zwischen Pfad und Dateiname zwei Backslashes ["x:\path\\Mary Roos\Mary Roos.pls"]
Das stört zwar NICHT beim Kopieren, Anlegen etc., sieht aber in Anzeige aus wie ein Bug.
c) Schönheitsfehler 2: Wenn eines der Unterverzeichnisse keine *.mp3s enthalten sollte, dann würde trotzdem eine Playlist mit 0 Titeln geschrieben werden.
Diesen Unsinn verhindere ich mit "If %counter%==0 goto :eof"
d) Schönheitsfehler 3: wenn NumberofEntries=1 wäre, dann würde im Code
[alt] echo NumberOfEntries=%counter%>>"%pls%" ...oder, aufgelöst
[alt] echo NumberOfEntries=1>>"%pls%" ..stehen.
Diese Kombination "1>>irgendwas" heißt aber IMMER: "Alle Programmmeldungen nach irgendwas".
Und bezieht sich auf alles, was VOR der 1 steht. Die 1 selbst würde verschluckt werden.
Deshalb klammere ich das mal ein:
[neu](echo NumberOfEntries=%counter%)>>"%pls%"
[alternative_neu]echo NumberOfEntries=%counter% >>"%pls%" --> Leerzeichen zwischen %counter% und ">>"%pls%"
Und auch noch eine Erkenntnis: PlayLists *.pls in der Start-Ebene werden nur angelegt, wenn denn auch in der Ebene direkt darunter wenigstens ein *.mp3 vorhanden ist.
Bei meinem einzigen Test (Also mangels Masse eine einzige Datei unter dem Namen "das soll ein Mp3 sein.mp3" in die vierte oder 5. Unterverzeichnisebene kopiert) lag zu meiner Verblüffung dann keine *.pls in der Startebene vor.
Tja.... muss Böby mit klarkommen.
[/Hoffentlich letztes Edit]
nach den ganzen Irrwegen, Missverständnissen und Tippfehlern nochmal das Erhaltenswerte als ein Batch.
::---snipp Playlist-maker-mit-Parameter-Startverzeichnis.bat
@echo off & setlocal EnableDelayedExpansion
If [%1]== (Echo %0: kein Startverzeichnis angegeben!) && goto :eof
CHCP 1252>nul
REM Hier will ich nur die Verzeichnisebene direkt unter Startverzeichnis, z.B. "c:\Eigene Musik" abfackeln
PushD "%~1"
REM Sowohl Ordner in dieser Verzeichnisebene darunter können Leerzeichen enthalten ["Hip Hop from Moldavia"]
REM und IMMER habe das die Verzeichnisnamen im gesamten Pfad ["C:\Eigene Musik\Blasmusik"]
REM Also beide Parameter IMMER in Anführungszeichen.
REM Zuerst das Startverzeichnis selbst
for /d %%i in (*.*) do call :makeThePlaylist "%%~nxi" "%%~dpnxi"
REM und nun alle Ebenen darunter rekursiv...
for /f "delims=" %%i in ('dir /b /s /A:d "%~1"') do call :makeThePlaylist "%%~nxi" "%%i"
PopD
goto :eof
:makeThePlayList
:: ---snipp Playlist-maker.bat:
set "pls=%~dp2%~1\%~1.pls"
REM Parameter1 und Parameter2 können beide in Anführungszeichen kommen- also mit "%~1"/"%~2" Anfü-Zeichen wegfiltern
set /a counter=0
for /R "%~2" %%i in (*.mp3) do set /a counter+=1
If %counter%==0 goto :eof
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%]
echo [playlist]>"%pls%"
(echo NumberOfEntries=%counter%)>>"%pls%"
set /a counter=1
for /R "%~2" %%i in (*.mp3) do (
echo File!counter!=%%i>>"%pls%"
echo Title!counter!=%%~ni>>"%pls%"
set /a counter+=1
)
goto :eof
Gruß
Biber
[Hoffentlich letztes Edit]
Ich habe den Schnipsel, nachdem ich es doch mal getestet habe, noch geringfügig angepasst.
a) Tippfehlerberichtigung. Thx Böby noch mal.
b) Schönheitsfehler 1: die Variable "%~dp2%" im Arbeits-Block hat schon einen abschließenden "\".
Daher reicht ein Backslah in set "pls=%~dp2%~1\%~1.pls".
Sonst sind zwischen Pfad und Dateiname zwei Backslashes ["x:\path\\Mary Roos\Mary Roos.pls"]
Das stört zwar NICHT beim Kopieren, Anlegen etc., sieht aber in Anzeige aus wie ein Bug.
c) Schönheitsfehler 2: Wenn eines der Unterverzeichnisse keine *.mp3s enthalten sollte, dann würde trotzdem eine Playlist mit 0 Titeln geschrieben werden.
Diesen Unsinn verhindere ich mit "If %counter%==0 goto :eof"
d) Schönheitsfehler 3: wenn NumberofEntries=1 wäre, dann würde im Code
[alt] echo NumberOfEntries=%counter%>>"%pls%" ...oder, aufgelöst
[alt] echo NumberOfEntries=1>>"%pls%" ..stehen.
Diese Kombination "1>>irgendwas" heißt aber IMMER: "Alle Programmmeldungen nach irgendwas".
Und bezieht sich auf alles, was VOR der 1 steht. Die 1 selbst würde verschluckt werden.
Deshalb klammere ich das mal ein:
[neu](echo NumberOfEntries=%counter%)>>"%pls%"
[alternative_neu]echo NumberOfEntries=%counter% >>"%pls%" --> Leerzeichen zwischen %counter% und ">>"%pls%"
Und auch noch eine Erkenntnis: PlayLists *.pls in der Start-Ebene werden nur angelegt, wenn denn auch in der Ebene direkt darunter wenigstens ein *.mp3 vorhanden ist.
Bei meinem einzigen Test (Also mangels Masse eine einzige Datei unter dem Namen "das soll ein Mp3 sein.mp3" in die vierte oder 5. Unterverzeichnisebene kopiert) lag zu meiner Verblüffung dann keine *.pls in der Startebene vor.
Tja.... muss Böby mit klarkommen.
[/Hoffentlich letztes Edit]