2016-09-26 2 views
0

자동으로 재생 목록을 생성하는 배치 스크립트 (->windows batch .bat automatic .m3u playlist creation/update)가 있습니다. 이 재생 목록은 rootdir의 하위 폴더에 저장됩니다 (코드 참조). 문제는 재생 목록에서 하위 폴더가 고려되지 않아 음악 파일을 찾을 수 없다는 것입니다. 나는동적 배치 스크립트의 상수 문자열

#EXTINF:???,The Realm Of Orzamar 
../Dragon Age Origins\The Realm Of Orzamar.mp3 

그리고 내가 그렇게 원 SET "location=%%c"에이 .../ 문자열을 넣을 수있는 방법

#EXTINF:???,The Realm Of Orzamar 
:\music\Dragon Age Origins\The Realm Of Orzamar.mp3 

을 얻을 뭔가

SET "location='.../' + %%c" 

등을 필요

#EXTINF:???,The Realm Of Orzamar 
Dragon Age Origins\The Realm Of Orzamar.mp3 

수 ' t는 music\으로 변환됩니다. 절대 경로는 파일 구조가 휴대용 드라이브에 있고 폴더 루트에서 독립적으로 작동해야하므로 절대적인 해결책이 아닙니다. 따라서 안드로이드 장치와 절대 경로가 다른 다른 장치에서 사용할 수 있습니다. 일괄 처리에 익숙하지 않은데 지금까지 몇 가지 기본적인 작업을 해봤지만 일괄 처리 구문을 모르기 때문에이 스크립트를 이해하지 못했습니다.

미리 감사드립니다.

코드 :

CHCP 1252 
@ECHO Off 
SETLOCAL 

:: make a tempfile 
:maketemp 
SET "tempfile=%temp%\%random%" 
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a") 



:: Need the start of the tree to scan 
SET "rootdir=H:\music" 
>"%tempfile%b" (ECHO(%rootdir%&ECHO(*) 
FOR /f "delims=:" %%a IN ('FINDSTR /o /L "*" "%tempfile%b"') DO SET /a len=%%a-1 

SET "destfile=%~1" 

:loop 
SHIFT 
SET nextdir=%~1 
IF NOT DEFINED nextdir GOTO process 
IF %nextdir:~0,1%==\ (
PUSHD "%~1" 
FOR /f "delims=" %%a IN ('dir /b /s /a-d *.mp3 *.mp4 *.ogg *.m4a *.wma *.flac *.wav') DO >>"%tempfile%a" ECHO(%%~na:2:%%a 
) else (
PUSHD "%rootdir%\%~1" 
FOR /f "delims=" %%a IN ('dir /b /s /a-d *.mp3 *.mp4 *.ogg *.m4a *.wma *.flac *.wav') DO >>"%tempfile%a" ECHO(%%~na:%len%:%%a 
) 
POPD 
GOTO loop 

:process 
>%destfile% ECHO(#EXTM3U 
(
FOR /f "tokens=1,2*delims=:" %%a IN ('SORT "%tempfile%a"') DO (
ECHO(#EXTINF:???,%%a 
SET "location=%%c" 
SETLOCAL enabledelayedexpansion 
    ECHO(!location:~%%b! 
endlocal 
) 
)>>%destfile% 

del "%tempfile%*" 


GOTO :EOF 
+1

Windows에서 백 슬래시가 표준이므로 슬래시를 경로 구분 기호로 사용하지 마십시오! – aschipfl

+0

수동으로'... \'을 시도했지만 제대로 작동하지 않았습니다. 하나의 폴더 레벨까지 올라야합니다. 지금까지'../'만이 그 일을 해왔다. –

답변

0

그것을 자신을 해결했다. 나는 잘못된 선을 보았다.

SET "location=%%c" 
SETLOCAL enabledelayedexpansion 
    set "location=!location:~%%b!" 
    set "back=../" 
    ECHO(!back!!location! 

작업을 수행합니다. !location:~%%b!는 전체 절대 경로에서 최상위 루트 문자를 루트 폴더까지 삭제하므로이 문자열을 추가해야합니다.

+0

(stackoverflow가 나를 허용 할 때 답변을 수락하고, 2 일을 기다려야한다고 말함) –