boeby
Goto Top

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

Content-ID: 41719

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

Ausgedruckt am: 23.11.2024 um 16:11 Uhr

Escobar
Escobar 09.10.2006 um 11:41:08 Uhr
Goto Top
so gehts:
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
Biber
Biber 09.10.2006 um 11:41:41 Uhr
Goto Top
Moin Böby,

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
Boeby
Boeby 09.10.2006 um 12:03:26 Uhr
Goto Top
Perfekt. Beide. Bin echt überwältigt. Respekt.

In Escobars Variante fehlt einfach noch den Title, aber sonst, die Aufgabe mit Bravour gelöst :D


Auf das wäre ich nicht so schnell gekommmen. Danke euch.

@Biber

Was bedeutet das "%%~ni" in der Zeile :

echo Title!counter!=%%~ni>>%pls%

Das nimmt ja die 4 letzten Zeichen aus der Variable. Aber wie das funktioniert ist mir echt schleierhaft....


@all

Ist es möglich das ä,ö,ü auch so übernommen werden ?
Dafür steht jetzt ein Sonderzeichen, wie : 


Danke euch beiden !
Biber
Biber 09.10.2006 um 12:13:47 Uhr
Goto Top
Was bedeutet das "%%~ni" in der Zeile :
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)

Meist klappt es mit dem Befehl "CHCP 1252" am Anfang des Batches.
Siehe unter CHCP /?

Gruß
Biber
Escobar
Escobar 09.10.2006 um 12:16:18 Uhr
Goto Top
Was bedeutet das "%%~ni"

gib' ma for /? in die console ein, da findest du dann einen eintrag zu %~ni (3. seite) und anderen parametern zur stringverarbeitung.

Esco
Boeby
Boeby 09.10.2006 um 12:29:21 Uhr
Goto Top
Alles klar.

Noch ein klitzekleines Problem :

Ich möchte die Datei ja in jedem Ordner ausführen lassen.
Dafür habe ich ein 2. Bat file gemacht. Darin steht folgendes:

for /R . %%i in (.) do (
"playlist-maker.bat"  
)

Allerdings führt er mir das playlist-maker.bat nur in dem ordner D:/eigene Musik aus. Darin befindet es sich.

Ich hoffe ich habs einigermassen verständlicher geschrieben.
Biber
Biber 09.10.2006 um 13:21:43 Uhr
Goto Top
Dazu würde ich in dem Playlist-Maker.bat selbst anpassen:

@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls"  
set /a counter=1
for /R "%~2" %%i in (*.mp3) do set /a counter+=1  
...
...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)
for /d %i in (*.*) do  Playlist-Maker.bat %~nxi "%~dpi"  
[denn dafür lohnt kein Batch... falls doch: bei allen Zählvariablen ein %-Zeichen mehr:
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]
Boeby
Boeby 09.10.2006 um 19:04:00 Uhr
Goto Top
Also wenn ich dich richtig verstanden habe, sieht es nacher so aus :

1. Bat File ( Playlist-Maker )
CHCP 1252
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls"  
set /a counter=1
for /R "%~2" %%i in (*.mp3) do set /a counter+=1  

@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
)

2. Bat File ( Playlist-Maker- Starter)
for /d %%i in (*.*) do  Playlist-Maker.bat %%~nxi "%%~dpi"  


Das geht aber nicht. Er erstellt im Playlist ordner nur eine PLS mit allen MP3s drin....
Ich glaube er erstellt diese Liste immer neu, da das Bat File nicht mehr aufhört. Ist irgendwie wie ein Loop....

Hast du noch ideen oder hab ich irgendwo was falsch gemacht ?

Danke dir

Gruss Böby
Biber
Biber 09.10.2006 um 20:00:15 Uhr
Goto Top
Moin böby,
nicht, dass ich meinen Schnipsel getestet hätte...
..aber Du hast in der Playlist-Maker.bat eine Zeile "doppelt".
Lösch mal bitte die zweite mit "@echo off & setlocal..." beginnende Zeile.

Der Rest sieht (für mich so rein theoretisch) gut aus.

Gruß
Biber
Boeby
Boeby 09.10.2006 um 20:28:27 Uhr
Goto Top
Ok. Also folgendes:

Ich habe jetzt die Zeile gelöscht.

Nun erstellt er mir in dem Ordner Playlist folgende Dateien:

- Chillout
- Pop
- Rock
- Trance
- usw.....

Das sind die Namen der Ordner die sich auf gleicher ebene wie die beiden Bat files befinden.
Die Playlists beinhalten aber jeweils alle Lieder aus allen Verzeichnissen. Also jedes File ist eigentlich das gleiche, nur halt mit anderem Namen....

Vielleicht hab ich es undeutlich geschrieben.
Ich möchte das er mir jeden Ordner scannt.
Danach soll er mir in den jeweiligen Ordner die MP3s in dem Ordner und dessen unterordner auflisten.

Also wenn ich diese Struktur habe:

1. Ebene: Chillout
2. Ebene: Summersurf
2. Ebene: irgendwas
2. Ebene: irgendwo

Also in jeder Ebene eine Liste mit den MP3s darin und dessen unterordner auch.....

Ich hoffe du verstehst...
Biber
Biber 09.10.2006 um 20:46:50 Uhr
Goto Top
Sorry, Böby,

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.
Boeby
Boeby 09.10.2006 um 21:10:42 Uhr
Goto Top
ok alles klar. Das Skript sieht jetzt so aus, wie du's gepostet hast. Ich poste es also übersichtlichkeitshalber nicht nochmals. Ich hab einfach trotzdem noch das CHCP 1252 vorne dran. Ich starte es ja direkt über das "start-playlist-maker.bat". Also ohne offenes CMD-Fenster.

Das start-playlist-maker.bat siehst du hier im Screenshot (oberste Zeile) . Auch die Fehler siehst du hier:
http://boeby.game-host.org/bilder/administrator/cmd.JPG

Wie du sehen kannst macht er zwar jedes Verzeichnis. Aber nicht die unterverzeichnisse und es sind auch bei jedem durchlauf alle MP3's in der Liste ( achte hier auf die anzahl der MP3's : Jedesmal 5046 ).

(
Eines noch um keine Missverständnisse aufkommen zu lassen. Die MP3s sind entweder von CD gerippt, oder vom internet Radio aufgenommen. Was ja 100% legal ist. )
Biber
Biber 09.10.2006 um 21:22:09 Uhr
Goto Top
..ich hasse Montage...
..aber wir tasten uns ran.

der Fehler liegt "nur" im Aufruf:

for /d %i in (*.*) do Playlist-maker.bat %~nxi "%~dpnxi"


Thats all.

Ach ja, und hinter das "CHCP 1252" konnst Du noch ein ">nul" setzen.
Also "CHCP 1252>nul"

Hoffe, das wars. face-wink
Boeby
Boeby 09.10.2006 um 21:46:19 Uhr
Goto Top
Hehe, jaja, diese Montage. :D

Ich glaube auch das der Fehler im Aufruf liegt, denn wenn ich deine letzte Zeile nehme, kommt folgendes :

C:\Eigene Musik>start-playlist-maker.bat
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~dpnxi"  

Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig
sind.
"start-playlist-maker.bat" ist syntaktisch an dieser Stelle nicht verarbeitbar.  

C:\Eigene Musik>for /d ~nxi "(*.*) do Playlist-maker.bat %~nxi "%~dpnxi"  
C:\Eigene Musik>

Scheint wohl irgendwo noch ein Fehler zu existieren. Siehst du wo ?
Biber
Biber 09.10.2006 um 22:06:48 Uhr
Goto Top
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:

:: ----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,,,]
Boeby
Boeby 09.10.2006 um 22:17:47 Uhr
Goto Top
Alles klar. Funktioniert fast perfekt. Danke

Dachte schon ich spinne. Manche Playlist hatten keine Einträge, obwohl im Ordner Dateien sind. Hab dann herausgefunden dass die Ordner abstände haben. So z.b. Hip Hop, German Hip Hop, Trance House.

Wie mach ich das, dass er Ordner mit Abstände auch annimmt ?

Etwas zusätzliches was noch schön wäre:

Wenn in jeden Ordner eine Playlist erstellt würde, mit den MP3s im root und dessen unterordner. Ich hoffe du verstehst wie ich meine....

PS: Du darfst es auch Dienstag werden lassen ... :D
Biber
Biber 09.10.2006 um 22:29:41 Uhr
Goto Top
Na gut,

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... face-wink
Wir sehen uns ja noch.... muss ja nicht heute sein.

Gruß
Biber
Boeby
Boeby 09.10.2006 um 22:40:37 Uhr
Goto Top
ja hol dir ein Milchshake. Hast ihn dir verdient...

Also so siehts aus :

start Playlist-maker
@echo off
CHCP 1252>nul
PushD "c:\Eigene Musik"  
for /d %%i in (*.*) do Playlist-maker.bat %%~nxi "%%~dpnxi"  
PopD


Playlist-maker:

CHCP 1252>nul
@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
)

Funktioniert leider noch nicht...

Kanns sein, das in dieser Zeile noch die " fehlen : ?
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls"  



Also wegen mir musst du heute nicht mehr an dem Problem studieren.
Wünsch dir deshalb erstmal gute Nacht...
Biber
Biber 10.10.2006 um 11:08:45 Uhr
Goto Top
Nochmal am Stück:

::---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
Der aufgerufene Batch Playlist-Maker.bat
:: ---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
Boeby
Boeby 10.10.2006 um 11:58:38 Uhr
Goto Top
Alles klar. Ich danke dir.
Ich werds heute abend mal testen. ( Bin momentan nicht an dem rechner, auf dem die MP3s sind )...

Werd dir heute abend nochmals schreiben, obs geklappt hat oder nicht..
Boeby
Boeby 11.10.2006 um 11:22:04 Uhr
Goto Top
Also deine letzte Konfiguration funktioniert perfekt. Allerdings hast du glaube ich etwas noch nicht verstanden. Ich versuchs nochmals zu erklären :

Denk dir mal den Ordner Playlist weg.

Dann sieht meine ordner struktur so aus:
C:\Eigene Musik\Chaosradio
C:\Eigene Musik\Chillout
C:\Eigene Musik\clipinc
C:\Eigene Musik\comedy
C:\Eigene Musik\encoded
C:\Eigene Musik\German Hip Hop
C:\Eigene Musik\Hip Hop
C:\Eigene Musik\pop
C:\Eigene Musik\Reggae
C:\Eigene Musik\Rock
C:\Eigene Musik\Soul
C:\Eigene Musik\Streams
C:\Eigene Musik\Swiss Hip Hop
C:\Eigene Musik\Trance House

Jeder dieser Ordner enthält noch unterordner.

In jeder ordner soll eine Playlist erstellt werden ! Also in Überordner ( wie oben) und dessen unterordner.

In der Playlist sollen immer die objekte enthalten sein, die sich auf gleicher ebene und darunterliegender befinden.

Also wenn wir mal als Beispiel den ordner Reggae nehmen dann sieht das so aus:

------------------reggae-----------------------
- Afroman
- Bob marley
...
..
..

-----------------------------------------------------

In den ordner Reggae soll jetzt eine Playlist erstellt werden, mit allen MP3s ( root und unterordner )drin.
In den ordner Bobmarley soll jetzt eine Playlist erstellt werden, mit allen MP3s ( root und unterordner )drin.


Ich hoffe du verstest mich...

Sonst schreib doch bitte...


Also soll die Playlist-maker durch jedes verzeichnis gezogen werden und dort ausgeführt werden....

Weisst du wie man der das befiehlt ?
Biber
Biber 11.10.2006 um 12:00:50 Uhr
Goto Top
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):
>for /d %i in ("C:\Eigene Musik\*.*") do @for /d %j in ("%i\*.*") do @playlist-maker "%~nxj" "%j"  
Noch eine Ebene tiefer:
>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
Boeby
Boeby 11.10.2006 um 12:19:47 Uhr
Goto Top
Moin Biber

hmmm, schade das es nicht einfacher geht. Mit ner schleife oder so.

Denn ich hab manchmal doch bis 5 Ebenen....
Das Skript ist relativ nutzlos wenn das nicht, da ich ja nicht nur c.a. 2 Ordner habe.Sind schon mehrere Dutzend


Der erste Aufruf in deinem letzten Post funktioniert übrigens nicht.
Er sagt mir, er könne den angegebenen Pfad nicht finden....


Danke für deine Hilfe
Biber
Biber 11.10.2006 um 13:04:27 Uhr
Goto Top
Dann nimm diesen (vom Prompt aus; im Batch %-zeichen verdoppeln):
>for /f "delims=" %i in ('dir /b /s /A:d "c:\Eigene Musik"') do @playlist-maker "%~nxi" "%i"  

Zu dem Fehler: in der letzten FOR..-Klammer muss es natürlich "%j\*.*" heißen statt "%i\*.*

Gruß
Biber
Boeby
Boeby 11.10.2006 um 13:58:47 Uhr
Goto Top
Ja jetzt wo du sagst, seh ichs auch mit dem i und dem j.

Super, jetzt macht er mir 256 Playlists.
Aber leider immernoch in den Ordner Playlists.

Ich möchte das er mir die Playlists direkt in den Ordner schreibt in dem er sie ausliest....

Verstehst du mich ?

Ich denk mal das sollte kein Problem mehr darstellen. Einfach irgendwo den Ordner Playlist mit einer variable ersetzen. Nur mit welcher ??
Biber
Biber 11.10.2006 um 14:10:57 Uhr
Goto Top
Na, das sollte kein Thema sein.

Irgendwo steht ja in dem Playlist-Maker.bat
... set "pls=playlist\%~1.pls"

Ändere das in ...set "pls=%~dp2\%~1.pls" .

...und dann setz bitte diesen Bandwurmthread auf "Gelöst" *schluchz*

Das Rauchen bald wieder anfangend
Biber
Boeby
Boeby 11.10.2006 um 14:25:15 Uhr
Goto Top
Nene, mit rauchen musst du nicht anfangen.
Wir habens fast....

Er erstellt jetzt zwar die Playlist, aber aussen am jeweiligen Ordner.

Das heisst ich habe z.b. den ordner "chillout".

und darin sind MP3s, dann sieht das jetzt so aus:

--------Eigene musik------------------

1.Ebene
Chillout.pls
Ordner: Chillout
2. Ebene
Mp3s

Ich möchte aber das sich die Playlist neben den MP3s befindet.

Also so:

---------------Eigene Musik-----------------
1. Ebene
Ordner Chillout
2. Ebene
MP3s und Playlist

Verstehst du mich ?

Also die Playlist soll im Ordner drin sein und nicht draussen....


Ja nacher sollten alle meine Wünsche erfüllt sein, und er kann als geschlossen markiert werden....
Biber
Biber 11.10.2006 um 14:30:59 Uhr
Goto Top
...set "pls=%~dpnx2\%~1.pls"
-oder schlicht:
...set "pls=%~2\%~1.pls"
*schweißabwisch*
Boeby
Boeby 11.10.2006 um 14:36:35 Uhr
Goto Top
TipTop

Perfekt.

Was soll ich sagen. Du bist der beste, echt !

man man man. Wenn man mal der Thread durchgeht und schaut wies am anfang ausgesehen hat und wies jetzt aussieht, wird einem schon halbwegs schwindelig...

Ne, echt. Grosses Dankeschön von mir !


Gruss Boeby


PS: Aber anfangen zu rauchen musst du deshalb nicht :D
Biber
Biber 11.10.2006 um 14:59:40 Uhr
Goto Top
So, Böby,
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. face-wink
[/Hoffentlich letztes Edit]