Batch - relativen Pfad filtern
HILFE
Hallo, habe unter Playliste *.pls mit bat erstellen ein tolles Skript zur Erstellung von Playlists gefunden. Leider arbeitet das nur mit absoluten Pfadabgaben, ich brauche die Playlists aber für meinen mp3-Player, der arbeitet nur mit relativen Pfaden. Da ich das aktuelle und alle Unterverzeichnisse durchsuchen muss, kann ich mit ./ nichts anfangen. Ich habe bereits versucht den set-Befehl zu modifizieren, scheitere aber daran, dass der komplette Pfad damit gelöscht wird, auch wenn nur der letzte Teil ersetzt werden soll. Kann mir jemand helfen? Anbei das Script
[Edit Biber] Code in Code-Tags gesetzt. [/Edit]
Hallo, habe unter Playliste *.pls mit bat erstellen ein tolles Skript zur Erstellung von Playlists gefunden. Leider arbeitet das nur mit absoluten Pfadabgaben, ich brauche die Playlists aber für meinen mp3-Player, der arbeitet nur mit relativen Pfaden. Da ich das aktuelle und alle Unterverzeichnisse durchsuchen muss, kann ich mit ./ nichts anfangen. Ich habe bereits versucht den set-Befehl zu modifizieren, scheitere aber daran, dass der komplette Pfad damit gelöscht wird, auch wenn nur der letzte Teil ersetzt werden soll. Kann mir jemand helfen? Anbei das Script
::---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
REM for /d %%i in (*.*) do call :makeThePlaylist "." "."
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:
echo %1 %2
set "pls=%~dp2%~1\%~1.pls"
set A=%2
set A=%A:%1=%
echo %A%
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
REM @ECHO pls: %pls% ; [%2];[%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
[Edit Biber] Code in Code-Tags gesetzt. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 116646
Url: https://administrator.de/forum/batch-relativen-pfad-filtern-116646.html
Ausgedruckt am: 06.05.2025 um 20:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo Anhnungsloser und willkommen im Forum!
Soferne Du nur eine Gesamt-Playlist für alles unterhalb des übergebenen Startverzeichnisses benötigst, könntest Du folgende Variante testen:
Grüße
bastla
[Edit] In Zeile 8 aufgrund LotPings Hinweis "%1" durch "%~1" ersetzt und auch gleich das überzählige %-Zeichen vor "%~nx1" entsorgt - das kommt davon, wenn beim Umstricken von "%%i" auf "%1" ungenau gearbeitet wird [/Edit]
Soferne Du nur eine Gesamt-Playlist für alles unterhalb des übergebenen Startverzeichnisses benötigst, könntest Du folgende Variante testen:
::---snipp Playlist-maker-mit-Parameter-Startverzeichnis.bat
@echo off & setlocal EnableDelayedExpansion
If [%1]== (Echo %0: kein Startverzeichnis angegeben!) && goto :eof
CHCP 1252>nul
set "BasePath=%~f1\"
PushD "%BasePath%"
call :makeThePlaylist "%~nx1" "%~1"
PopD
goto :eof
:makeThePlayList
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 [playlist]>"%pls%"
(echo NumberOfEntries=%counter%)>>"%pls%"
set /a counter=1
for /R "%~2" %%i in (*.mp3) do (
set "RelPath=%%~fi"
set "RelPath=!RelPath:%BasePath%=!"
echo File!counter!=!RelPath!>>"%pls%"
echo Title!counter!=%%~ni>>"%pls%"
set /a counter+=1
)
goto :eof
bastla
[Edit] In Zeile 8 aufgrund LotPings Hinweis "%1" durch "%~1" ersetzt und auch gleich das überzählige %-Zeichen vor "%~nx1" entsorgt - das kommt davon, wenn beim Umstricken von "%%i" auf "%1" ungenau gearbeitet wird [/Edit]

Hallo "derkeineAhnunghat",
auch vonmir ein "Willkommen im Forum".
Beim Posten von Code solltest du die Formatierungshinweise beachten und die Tags < code> < /code> benutzen, es ist dann einfach besser lesbar.
@bastla Sollte in Zeile 08. am Ende nicht besser
Gruß
LotPings
auch vonmir ein "Willkommen im Forum".
Beim Posten von Code solltest du die Formatierungshinweise beachten und die Tags < code> < /code> benutzen, es ist dann einfach besser lesbar.
@bastla Sollte in Zeile 08. am Ende nicht besser
"%~1"
stehen?Gruß
LotPings
Hallo derderkeineAhnunghat!
Um tatsächlich in jedem Unterverzeichnis eine eigene Playlist zu erstellen (die dann wiederum alle in diesem Verzeichnis und in allen Unterverzeichnissen des betreffenden Verzeichnisses liegenden mp3-Files enthält), könnte das mit einer "aufgepropften" Schleife so aussehen:
Inkludiert sind hier noch kleinere Ergänzungen, um zB auch ein Rootverzeichnis als Startverzeichnis verwenden zu können und nicht eine ".pls" (also ohne Namen) als Ergebnis zu erhalten ...
Grüße
bastla
Um tatsächlich in jedem Unterverzeichnis eine eigene Playlist zu erstellen (die dann wiederum alle in diesem Verzeichnis und in allen Unterverzeichnissen des betreffenden Verzeichnisses liegenden mp3-Files enthält), könnte das mit einer "aufgepropften" Schleife so aussehen:
::---snipp Playlist-maker-mit-Parameter-Startverzeichnis.bat
@echo off & setlocal EnableDelayedExpansion
If [%1]== (Echo %0: kein Startverzeichnis angegeben!) && goto :eof
CHCP 1252>nul
for /r "%~1" %%a in (.) do call :MakeThePlayListForThisDir "%%a"
goto :eof
:MakeThePlayListForThisDir
set "BasePath=%~f1"
if "%BasePath:~-1%" neq "\" set "BasePath=%BasePath%\"
PushD "%BasePath%"
call :makeThePlaylist "%~nx1" "%~1"
PopD
goto :eof
:makeThePlayList
if "%~1" neq "" (set "plsName=%~dp2%~1\%~1") else (set "plsName=%~d2")
if "%plsName:~-1%"==":" set "plsName=%plsName:~,-1%"
set "pls=%plsName%.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 [playlist]>"%pls%"
(echo NumberOfEntries=%counter%)>>"%pls%"
set /a counter=1
for /R "%~2" %%i in (*.mp3) do (
set "RelPath=%%~fi"
set "RelPath=!RelPath:%BasePath%=!"
echo File!counter!=!RelPath!>>"%pls%"
echo Title!counter!=%%~ni>>"%pls%"
set /a counter+=1
)
goto :eof
Grüße
bastla