我有一個批處理腳本( - >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
由於反斜槓在Windows中是標準的,因此不要使用正斜槓作爲路徑分隔符! – aschipfl
我手動嘗試'... \',但沒有奏效。我需要去一個文件夾級別。到目前爲止,只有'../'已經在做這項工作。 –