动态批处理脚本中的常量字符串

Constant string in dynamic batch script

我有一个批处理脚本 (-> 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\ 。绝对路径不是一个完整的解决方案,因为文件结构被放置在便携式驱动器上并且应该独立工作并且在文件夹根目录之外,因此可以在 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

自己解决了。我看错行了

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

完成任务。 !location:~%%b! 删除从完整绝对路径到文件夹根目录的前导字符,所以我只需要在此之后添加我的字符​​串