2016-09-26 99 views
0

我有一個批處理腳本( - >windows batch .bat automatic .m3u playlist creation/update)來自動生成播放列表。這些播放列表保存在rootdir的子文件夾中(請參閱代碼)。 所以問題在於,播放列表中沒有考慮子文件夾,因此無法找到音樂文件。我得到動態批處理腳本中的常量字符串

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

我需要

#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"所以它贏得「將被轉換爲music\。 absolut路徑並不是一個解決方案,因爲文件結構放置在便攜式驅動器上,應該獨立工作並且不在文件夾根目錄下,因此可用於Android設備以及具有不同絕對路徑的任何其他設備。 我對批處理沒有經驗,只是做了一些非常基本的東西到目前爲止,我不太瞭解這個腳本,因爲我不知道批處理語法。

在此先感謝。

代碼:

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天) –

相關問題