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
GELÖST

Playliste *.pls mit bat erstellen

Frage Entwicklung Batch & Shell

Mitglied: Boeby

Boeby (Level 1) - Jetzt verbinden

09.10.2006, aktualisiert 11.10.2006, 6766 Aufrufe, 30 Kommentare, 1 Danke

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
30 Antworten
Mitglied: Escobar
09.10.2006 um 11:41 Uhr
so gehts:
01.
set Pfad=D:\meinMP3Pfad 
02.
set playlist=playlisttest.txt 
03.
echo [playlist] >%playlist% 
04.
set counter=1 
05.
 
06.
for /R %Pfad% %%i in (*.mp3) do (call:[WriteData] "%%i") 
07.
pause 
08.
goto:eof 
09.
 
10.
:[WriteData] 
11.
 echo File%counter%=%~1 >>%playlist% 
12.
 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
Bitte warten ..
Mitglied: Biber
09.10.2006 um 11:41 Uhr
Moin Böby,

vielleicht so:
01.
::--MakePlaylist.bat [ungetestete Skizze] 
02.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\playlisttest.pls" 
03.
set /a counter=1 
04.
for /R . %%i in (*.mp3) do set /a counter+=1 
05.
echo [playlist] >%pls% 
06.
echo NumberOfEntries=%counter%>>%pls% 
07.
set /a counter=1 
08.
for /R . %%i in (*.mp3) do ( 
09.
  echo File!counter!=%%i>>%pls% 
10.
  echo Title!counter!=%%~ni>>%pls% 
11.
  set /a counter+=1 
12.
)
Gruß
Biber
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 12:03 Uhr
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 !
Bitte warten ..
Mitglied: Biber
09.10.2006 um 12:13 Uhr
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
Bitte warten ..
Mitglied: Escobar
09.10.2006 um 12:16 Uhr
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
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 12:29 Uhr
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:

01.
for /R . %%i in (.) do ( 
02.
"playlist-maker.bat" 
03.
)
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.
Bitte warten ..
Mitglied: Biber
09.10.2006 um 13:21 Uhr
Dazu würde ich in dem Playlist-Maker.bat selbst anpassen:

01.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls" 
02.
set /a counter=1 
03.
for /R "%~2" %%i in (*.mp3) do set /a counter+=1 
04.
...
...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)
01.
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:
01.
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]
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 19:04 Uhr
Also wenn ich dich richtig verstanden habe, sieht es nacher so aus :

1. Bat File ( Playlist-Maker )
01.
CHCP 1252 
02.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls" 
03.
set /a counter=1 
04.
for /R "%~2" %%i in (*.mp3) do set /a counter+=1 
05.
 
06.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\playlisttest.pls" 
07.
set /a counter=1 
08.
for /R . %%i in (*.mp3) do set /a counter+=1 
09.
echo [playlist] >%pls% 
10.
echo NumberOfEntries=%counter%>>%pls% 
11.
set /a counter=1 
12.
for /R . %%i in (*.mp3) do ( 
13.
  echo File!counter!=%%i>>%pls% 
14.
  echo Title!counter!=%%~ni>>%pls% 
15.
  set /a counter+=1 
16.
)
2. Bat File ( Playlist-Maker- Starter)
01.
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
Bitte warten ..
Mitglied: Biber
09.10.2006 um 20:00 Uhr
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
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 20:28 Uhr
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...
Bitte warten ..
Mitglied: Biber
09.10.2006 um 20:46 Uhr
Sorry, Böby,

da waren noch mehr "doppelte" Zeilen drin...
Hier noch mal am Stück:
01.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls" 
02.
set /a counter=0 
03.
for /R "%~2" %%i in (*.mp3) do set /a counter+=1 
04.
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%] 
05.
echo [playlist] >%pls% 
06.
echo NumberOfEntries=%counter%>>%pls% 
07.
set /a counter=1 
08.
for /R  "%~2" %%i in (*.mp3) do ( 
09.
  echo File!counter!=%%i>>%pls% 
10.
  echo Title!counter!=%%~ni>>%pls% 
11.
  set /a counter+=1 
12.
)

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.
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 21:10 Uhr
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. )
Bitte warten ..
Mitglied: Biber
09.10.2006 um 21:22 Uhr
..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.
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 21:46 Uhr
Hehe, jaja, diese Montage. :D

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

01.
C:\Eigene Musik>start-playlist-maker.bat 
02.
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters 
03.
ist ungültig: %~dpnxi" 
04.
 
05.
Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig 
06.
sind. 
07.
"start-playlist-maker.bat" ist syntaktisch an dieser Stelle nicht verarbeitbar. 
08.
 
09.
C:\Eigene Musik>for /d ~nxi "(*.*) do Playlist-maker.bat %~nxi "%~dpnxi" 
10.
C:\Eigene Musik>
Scheint wohl irgendwo noch ein Fehler zu existieren. Siehst du wo ?
Bitte warten ..
Mitglied: Biber
09.10.2006 um 22:06 Uhr
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:

01.
:: ----snipp Start-Playlist-Maker.bat 
02.
@echo off 
03.
CHCP 1252>nul 
04.
PushD "c:\Eigene Musik" 
05.
for /d %%i in (*.*) do Playlist-maker.bat %%~nxi "%%~dpnxi" 
06.
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,,,]
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 22:17 Uhr
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
Bitte warten ..
Mitglied: Biber
09.10.2006 um 22:29 Uhr
Na gut,

das eine machen wir noch vor Dienstag...
Wie mach ich das, dass er Ordner mit Abstände auch annimmt ?
01.
:: ----snipp Start-Playlist-Maker.bat 
02.
@echo off 
03.
CHCP 1252>nul 
04.
PushD "c:\Eigene Musik" 
05.
for /d %%i in (*.*) do Playlist-maker.bat "%%~nxi" "%%~dpnxi" 
06.
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
Bitte warten ..
Mitglied: Boeby
09.10.2006 um 22:40 Uhr
ja hol dir ein Milchshake. Hast ihn dir verdient...

Also so siehts aus :

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

Playlist-maker:

01.
CHCP 1252>nul 
02.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%1.pls" 
03.
set /a counter=0 
04.
for /R "%~2" %%i in (*.mp3) do set /a counter+=1 
05.
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%] 
06.
echo [playlist] >"%pls%" 
07.
echo NumberOfEntries=%counter%>>"%pls%" 
08.
set /a counter=1 
09.
for /R  "%~2" %%i in (*.mp3) do ( 
10.
  echo File!counter!=%%i>>"%pls%" 
11.
  echo Title!counter!=%%~ni>>"%pls%" 
12.
  set /a counter+=1 
13.
14.
 
15.
 
Funktioniert leider noch nicht...

Kanns sein, das in dieser Zeile noch die " fehlen : ?
01.
@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...
Bitte warten ..
Mitglied: Biber
10.10.2006 um 11:08 Uhr
Nochmal am Stück:

01.
::---snipp startPlaylist-maker.bat 
02.
@echo off 
03.
CHCP 1252>nul 
04.
REM Hier will ich nur die Verzeichnisebene direkt unter "c:\Eigene Misik" abfackeln 
05.
PushD "c:\Eigene Musik" 
06.
REM Sowohl Ordner in dieser Verzeichnisebene darunter können Leerzeichen enthalten ["Hip Hop from Moldavia"] 
07.
REM und IMMER  die Verzeichnisnamen im gesamten Pfad ["C:\Eigene Musik\Blasmusik"] 
08.
REM Also beiede Parameter IMMER in Anführungszeichen. 
09.
for /d %%i in (*.*) do "c:\eigene Musik\Playlist-maker.bat" "%%~nxi" "%%~dpnxi" 
10.
REM und dem aufgerufenen Batch habe ich jetzt eine Pfadangabe verpasst... ist sonst zu unsicher. 
11.
PopD
Der aufgerufene Batch Playlist-Maker.bat
01.
:: ---snipp Playlist-maker.bat: 
02.
@echo off & setlocal EnableDelayedExpansion & set "pls=playlist\%~1.pls" 
03.
REM Parameter1 und Parameter2 können beide in Anführungszeichen kommen- also mit "%~1"/"%~2" Anfü-Zeichen wegfiltern 
04.
set /a counter=0 
05.
for /R "%~2" %%i in (*.mp3) do set /a counter+=1 
06.
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%] 
07.
echo [playlist] >"%pls%" 
08.
echo NumberOfEntries=%counter%>>"%pls%" 
09.
set /a counter=1 
10.
for /R  "%~2" %%i in (*.mp3) do ( 
11.
  echo File!counter!=%%i>>"%pls%" 
12.
  echo Title!counter!=%%~ni>>"%pls%" 
13.
  set /a counter+=1 
14.
)
Gruß
Biber
Bitte warten ..
Mitglied: Boeby
10.10.2006 um 11:58 Uhr
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..
Bitte warten ..
Mitglied: Boeby
11.10.2006 um 11:22 Uhr
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:
01.
C:\Eigene Musik\Chaosradio 
02.
C:\Eigene Musik\Chillout 
03.
C:\Eigene Musik\clipinc 
04.
C:\Eigene Musik\comedy 
05.
C:\Eigene Musik\encoded 
06.
C:\Eigene Musik\German Hip Hop 
07.
C:\Eigene Musik\Hip Hop 
08.
C:\Eigene Musik\pop 
09.
C:\Eigene Musik\Reggae 
10.
C:\Eigene Musik\Rock 
11.
C:\Eigene Musik\Soul 
12.
C:\Eigene Musik\Streams 
13.
C:\Eigene Musik\Swiss Hip Hop 
14.
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:

01.
------------------reggae----------------------- 
02.
- Afroman 
03.
- Bob marley 
04.
... 
05.
.. 
06.
.. 
07.
 
08.
-----------------------------------------------------
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 ?
Bitte warten ..
Mitglied: Biber
11.10.2006 um 12:00 Uhr
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):
01.
>for /d %i in ("C:\Eigene Musik\*.*") do @for /d %j in ("%i\*.*") do @playlist-maker "%~nxj" "%j"
Noch eine Ebene tiefer:
01.
>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
Bitte warten ..
Mitglied: Boeby
11.10.2006 um 12:19 Uhr
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
Bitte warten ..
Mitglied: Biber
11.10.2006 um 13:04 Uhr
Dann nimm diesen (vom Prompt aus; im Batch %-zeichen verdoppeln):
01.
>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
Bitte warten ..
Mitglied: Boeby
11.10.2006 um 13:58 Uhr
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 ??
Bitte warten ..
Mitglied: Biber
11.10.2006 um 14:10 Uhr
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
Bitte warten ..
Mitglied: Boeby
11.10.2006 um 14:25 Uhr
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:

01.
--------Eigene musik------------------ 
02.
 
03.
1.Ebene 
04.
Chillout.pls 
05.
Ordner: Chillout 
06.
2. Ebene 
07.
Mp3s 
08.
 
Ich möchte aber das sich die Playlist neben den MP3s befindet.

Also so:

01.
---------------Eigene Musik----------------- 
02.
1. Ebene 
03.
Ordner Chillout 
04.
2. Ebene 
05.
MP3s und Playlist 
06.
 
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....
Bitte warten ..
Mitglied: Biber
11.10.2006 um 14:30 Uhr
...set "pls=%~dpnx2\%~1.pls"
-oder schlicht:
...set "pls=%~2\%~1.pls"
*schweißabwisch*
Bitte warten ..
Mitglied: Boeby
11.10.2006 um 14:36 Uhr
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
Bitte warten ..
Mitglied: Biber
11.10.2006 um 14:59 Uhr
So, Böby,
nach den ganzen Irrwegen, Missverständnissen und Tippfehlern nochmal das Erhaltenswerte als ein Batch.

01.
::---snipp Playlist-maker-mit-Parameter-Startverzeichnis.bat 
02.
@echo off & setlocal EnableDelayedExpansion 
03.
If [%1]==[] (Echo %0: kein Startverzeichnis angegeben!) && goto :eof 
04.
CHCP 1252>nul 
05.
REM Hier will ich nur die Verzeichnisebene direkt unter Startverzeichnis, z.B. "c:\Eigene Musik" abfackeln 
06.
PushD "%~1" 
07.
REM Sowohl Ordner in dieser Verzeichnisebene darunter können Leerzeichen enthalten ["Hip Hop from Moldavia"] 
08.
REM und IMMER  habe das die Verzeichnisnamen im gesamten Pfad ["C:\Eigene Musik\Blasmusik"] 
09.
REM Also beide Parameter IMMER in Anführungszeichen. 
10.
REM Zuerst das Startverzeichnis selbst 
11.
for /d %%i in (*.*) do call :makeThePlaylist "%%~nxi" "%%~dpnxi" 
12.
REM und nun alle Ebenen darunter rekursiv... 
13.
for /f "delims=" %%i in ('dir /b /s /A:d "%~1"') do call :makeThePlaylist "%%~nxi" "%%i" 
14.
PopD 
15.
goto :eof 
16.
 
17.
:makeThePlayList 
18.
:: ---snipp Playlist-maker.bat: 
19.
set "pls=%~dp2%~1\%~1.pls" 
20.
REM Parameter1 und Parameter2 können beide in Anführungszeichen kommen- also mit "%~1"/"%~2" Anfü-Zeichen wegfiltern 
21.
set /a counter=0 
22.
for /R "%~2" %%i in (*.mp3) do set /a counter+=1 
23.
If %counter%==0 goto :eof 
24.
@ECHO [Debuginfo] pls: %pls% ---- Verzeichnis: [%2]; Anzahl mp3s [%counter%] 
25.
echo [playlist]>"%pls%" 
26.
(echo NumberOfEntries=%counter%)>>"%pls%" 
27.
set /a counter=1 
28.
for /R  "%~2" %%i in (*.mp3) do ( 
29.
  echo File!counter!=%%i>>"%pls%" 
30.
  echo Title!counter!=%%~ni>>"%pls%" 
31.
  set /a counter+=1 
32.
33.
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]
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Windows 7
gelöst Bat Datei erstellen für Homeroot (2)

Frage von leon22 zum Thema Windows 7 ...

RedHat, CentOS, Fedora
gelöst Erstellen von Desktopverknüpfungen und Anpassung der Taskleiste (2)

Frage von honeybee zum Thema RedHat, CentOS, Fedora ...

Vmware
ESXI Template erstellen (2)

Frage von Phill93 zum Thema Vmware ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...