windows 批处理 .bat 自动 .m3u 播放列表创建/更新

Posted

技术标签:

【中文标题】windows 批处理 .bat 自动 .m3u 播放列表创建/更新【英文标题】:windows batch .bat automatic .m3u playlist creation / update 【发布时间】:2014-04-19 12:29:59 【问题描述】:

每次我在计算机和/或智能手机上添加新文件时,我都厌倦了手动更新庞大的 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 文件夹-1 文件夹-2 [...] 文件夹-n

为了简单起见,输出 file.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:啤酒,我会煮鸭 magret ;-)

【问题讨论】:

#EXTINF 标记的 227/257/311 是什么? 以秒为单位的跟踪时间 -- [链接] (en.wikipedia.org/wiki/M3u) 您必须提供有关您期望在每个文件夹中的内容的信息 - 例如,every folder 中的 m3u 文件在 c:\misc 下,每个 mp3 文件都在文件中,@987654329 @ 并打电话给MyMusic.m3u。根据需要进行调整。 不确定我们是否相互理解 --foxidrive-- 我需要批处理递归搜索指定文件夹(作为参数传递)并查找 *.mp3 *.m4a *.ogg(无论如何文件类型)并生成 1 个且仅 1 个 playlist.m3u 作为指定参数。如果我不够清楚,请告诉我 那么 - 如何提取运行时数据? 【参考方案1】:
@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.batCALL 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

注意“包含空格的路径必须用引号引起来”

【讨论】:

你太狡猾了!!你甚至添加了 SORT 你摇滚,告诉我你是瞎写的,我相信你可以在水上行走 ;-) - 所以 99.8% 好第一通! -- 只需调整 1 行:输出是 \misc\60s\The_.mp3,应该是 misc\60s\The_.mp3-- 然后我在 files_names!.mp3 中遇到了 ! 的问题:它可能被解释为 windows 的信号/命令......但它是最不担心我可以从文件名中删除!,它是如此罕见......对于轨道长度,如果我能找到一个命令行轻量级执行器,也许我会在之后插入它,但是将轨道声明为 0 是好吧,谁在乎一首歌有多长? 谢谢,谢谢,谢谢@Magoo,第二遍一切顺利!!!确认在 win7 cmd 上工作,用于 win winamp 和股票 android 播放器。现在,我如何/在哪里可以将完整的 .zip 源代码和一小段阅读我的内容供其他寻求相同自动化的用户阅读?网络上某处是否有用于有用脚本的 Windows 批处理存储库?如果您想在脚本上添加您的贡献者姓名......欢迎!至于啤酒和鸭肉,不是开玩笑的,如果你恰好是法国尼斯附近的邻居,请做我的客人! 最后调整...我有这个输出(绝对路径)\0-smartphone\SD card\0-music\misc-AAC\1980s\A-Ha - Take On Me.m4a 和玩家(手机和 PC 同步镜像这就是为什么)更喜欢(相对路径)misc-AAC\1980s\A-Ha - Take On Me.m4a 而我不'不知道如何调整......请帮助@Magoo!

以上是关于windows 批处理 .bat 自动 .m3u 播放列表创建/更新的主要内容,如果未能解决你的问题,请参考以下文章

windows下使用bat批处理文件定时自动备份oracle数据库并上传ftp服务器

错误记录Windows 系统 bat 脚本报错 ( 使用 pause 拦截窗口自动关闭 | 方便查看错误 )

Perl-4 Windows批处理(cmd/bat)常用命令大全 2020-12-20

WINDOWS程序监控及故障自动重启思路及bat脚本实现

Windows 批处理(cmd/bat)常用命令教程

Windows批处理(cmd/bat)常用命令小结