windows batch .bat 自动 .m3u 播放列表创建/更新

标签 windows batch-file cmd playlist m3u

厌倦了每次在我的电脑和/或智能手机上添加新文件时手动更新我巨大的 mp3/mp4 数据库, 所以我正在寻找一些帮助来创建一个批处理文件,自动创建/更新我所有的播放列表 .m3u。

需要 2 个批处理文件(第一个调用第二个):


第一个很简单,我快搞定了 ;-)

create_all_playlist.bat(无需参数,自定义文件)

create_m3u.bat  misc-70-80.m3u            misc\70\ misc\80\
create_m3u.bat  misc-70-80-90.m3u         misc\70\ misc\80\ misc\90\
create_m3u.bat  misc-60-70-2000-2010.m3u  misc\60\ misc\70\ misc\2000\ misc\2010\
[...]
create_m3u.bat  albums-2010.m3u           albums\2010\

很简单吧?


我需要你的帮助来编写第二个 .bat,动态的:

create_m3u.bat output-playlist-name.m3u folder-1 folder-2 [...] folder-n

为了简单起见,输出文件 .m3u 应该看起来像这样(注意所有都是相对路径和搜索 *.mp3 *.mp4 *.ogg(无论我 cutomize/hard 什么类型-code) 将递归到指定的文件夹中)

(原始 .m3u 兼容大多数安卓和 PC 播放器)

misc\2000s\Kelly Rowland - Work (Freemasons Arabic Mix).mp3
misc\2000s\Keri Hilson - Knock You Down ft Kanye West and Ne-Yo.mp3
misc\2000s\Kid Cudi vs Crookers - Day n Nite.mp3
misc\2000s\Korn - Inja.mp3
[...]
misc\2000s\Ladyhawke - My Delirium.mp3

最好,只为最好,比方说,如果有人有足够的技能来产生完整的 mp3/mp4 TAG 阅读和格式化,如下所示

#EXTM3U
#EXTINF:227,A-Ha - Take On Me
misc\80s\A-Ha - Take On Me.mp3
#EXTINF:257,ACDC - Back in Black
misc\80s\ACDC - Back in Black.mp3
#EXTINF:311,Aerosmith & Run Dmc - Walk This Way
misc\80s\Aerosmith & Run Dmc - Walk This Way.mp3
[...]
#EXTINF:289,Alannah Myles - Black Velvet
misc\80s\Alannah Myles - Black Velvet.mp3

谢谢!!

对于原始的 m3u,我要啤酒 :-)

对于扩展的完整 m3u:啤酒,我会煮鸭子 ;-)

最佳答案

@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=c:\sourcedir"
>"%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
PUSHD "%rootdir%\%~1"
FOR /f "delims=" %%a IN ('dir /b /s /a-d *.mp3 *.mp4 *.ogg') DO >>"%tempfile%a" ECHO(%%~na:%%a
POPD 
GOTO loop

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

我使用 c:\sourcedir 作为起始目录。不执行参数有效性检查。您需要从 create_all_playlist.bat CALL create_m3u.bat,因为目标可执行文件是一个批处理文件。

至于丢失的数据——最难的部分是提取信息....


编辑以允许 ! 在文件名中并从路径中删除前导 \


修订:允许绝对路径

@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=c:\sourcedir"
>"%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') DO >>"%tempfile%a" ECHO(%%~na:2:%%a
) else (
 PUSHD "%rootdir%\%~1"
 FOR /f "delims=" %%a IN ('dir /b /s /a-d *.mp3 *.mp4 *.ogg') 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 batch .bat 自动 .m3u 播放列表创建/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22401214/

相关文章:

python - 当我在 python 中运行 cmd 时,cx_freeze 可执行文件不起作用

regex - 在批处理脚本中打印第二个标记之后的所有标记

linux - Linux 中的 LARGE_INTEGER 和 BYTE 类型?

batch-file - .bat 文件 - 将新变量写入 .msl (.txt) 文件

sql-server - 使用 SQLCMD 执行发布脚本不返回

windows - 如何通过批处理脚本检查进程是否正在运行

c# - 从 WPF Windows 应用程序到实际控制台的输出 Console.WriteLine

java - 通过java应用程序在windows机器上设置日期和时间的最佳方法

c++ - 等待另一个进程锁定然后解锁 Win32 互斥量

Windows 7 - 无法在 C :\Program Files 中更新我的程序文件