Windows пакетное .bat автоматическое создание / обновление плейлиста .m3u

надоело вручную обновлять мою огромную базу данных mp3/mp4 каждый раз, когда я добавляю новые файлы на свой компьютер и/или смартфон, поэтому мне нужна помощь в создании пакетного файла, который автоматически создает/обновляет все мои плейлисты .m3u.

Требуются 2 командных файла (1-й вызывает 2-й):


1-й легко, я почти понял ;-)

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 выходное-имя-плейлиста.m3u папка-1 папка-2 [...] папка-n

чтобы играть было проще, выходной файл .m3u должен выглядеть так (обратите внимание, что все это относительный путь и поиск *.mp3 *.mp4 *.ogg (независимо от того, какой тип я вырезал/жестко кодировал) будет рекурсивно в указанную папку)

(необработанный .m3u совместим с большинством проигрывателей Android и ПК)

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

В лучшем случае, только для самых лучших, скажем, если кто-то достаточно опытен, чтобы произвести полное чтение и форматирование TAG mp3/mp4, как показано ниже.

#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 ;-)


person alex    schedule 14.03.2014    source источник
comment
для чего 227/257/311 с тегом #EXTINF?   -  person foxidrive    schedule 14.03.2014
comment
время отслеживания в секундах -- [ссылка] (en.wikipedia.org/wiki/M3u)   -  person alex    schedule 14.03.2014
comment
Вам нужно будет предоставить информацию о том, что вы ожидаете в каждой папке — например, m3u файл в every folder под c:\misc с каждым mp3 файлом в файле и no other filetypes и называется MyMusic.m3u. Отрегулируйте по мере необходимости.   -  person foxidrive    schedule 14.03.2014
comment
не уверен, что мы понимаем друг друга там --foxidrive-- мне нужно, чтобы пакет рекурсивно искал в указанной папке (передается как параметры) и искал *.mp3 *.m4a *.ogg (любой тип файла) и производил 1 и только 1 playlist.m3u, указанный в качестве параметра. дайте мне знать, если я не достаточно ясно   -  person alex    schedule 14.03.2014
comment
Итак, как вы извлекаете данные времени выполнения?   -  person Magoo    schedule 15.03.2014
comment
3 варианта @Magoo: -1-й нет: для версии 1.0 обычный текст, в этом нет необходимости, просто file_name.mp3 в порядке; -2nd вы не : даже для расширенной версии 2.0 длина времени является опцией, а не требованием... поэтому вы можете просто пропустить ее (#EXTINF:,ACDC[...]) или введите любое значение, которое я думаю (поставьте 0?) -3-е, что вы делаете: версия 2.0; для этого вам нужно прочитать тег MP3/MP4/OGG, чтобы получить длину, но это было бы излишним и хлопотным, если задействовано слишком много типов файлов, я думаю, вам нужен другой считыватель мета-тегов, как get_MP3_TAG (в .file, out.length, out.title, out.artist, out.field [...])   -  person alex    schedule 15.03.2014
comment
Я столкнулся с похожей задачей, и вот мое решение: vitsoft.info/skimid3.htm#TalkingPlayer   -  person vitsoft    schedule 16.03.2014
comment
декуйи @vitsoft! для версии 1.0 я буду придерживаться необработанного .bat - скажем, версия 2.0 будет использовать ваш skimid3.exe /s, любое предложение сценария .bat о том, как подключить его к существующему скрипту @Magoo .bat?   -  person alex    schedule 16.03.2014
comment
последняя настройка... у меня есть этот вывод (абсолютный путь) \0-smartphone\SD card\0-music\misc-AAC\1980s\A-Ha - Take On Me.m4a и игроки (телефон и ПК в синхронизированном зеркале, вот почему) предпочли бы (относительный путь) misc-AAC\1980s\A-Ha - Take On Me.m4a и я не знаю, как настроить.... помогите @Magoo пожалуйста!!   -  person alex    schedule 12.02.2015


Ответы (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 в качестве стартового каталога. Проверки допустимости параметров не выполняются. Вам нужно будет CALL create_m3u.bat из create_all_playlist.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

Отмечая, что «пути, содержащие пробелы, должны быть в кавычках»

person Magoo    schedule 15.03.2014
comment
мужик ты хитрый!! вы даже добавили SORT, вы молодец, скажите мне, что вы написали это вслепую, и я поверю, что вы можете ходить по воде ;-) - так что 99,8% хороший 1-й проход! -- всего 1 строка для настройки: вывод \misc\60s\The_.mp3, а должен быть misc\60s\The_.mp3 -- тогда у меня возникла проблема с ! в files_names!.mp3 : это может быть интерпретировано как сигнал/команда для Windows... но это меньше всего беспокоит, что я могу изгнать ! из файлов имена, это так необычно ... для длины трека, если я смогу найти облегченный exec cmd-line, может быть, я подключу его позже, но если трек объявляется в 0, это нормально, кого волнует, как долго длится песня? - person alex; 15.03.2014
comment
спасибо, спасибо и спасибо @Magoo, все хорошо на втором проходе!!! Подтверждено, что работает на win7 cmd, для win winamp и стокового плеера android. теперь, как/где я могу поместить полный исходный файл .zip и небольшой файл readme для других пользователей, которым нужна такая же автоматизация? есть ли где-нибудь в сети пакетный репозиторий Windows для полезных скриптов? если вы хотите добавить свое имя участника в сценарий... добро пожаловать! что касается пива и утки, это была не шутка, если вы оказались соседом под Ниццей во Франции, будьте моим гостем! - person alex; 16.03.2014
comment
последняя настройка... у меня есть этот вывод (абсолютный путь) \0-smartphone\SD card\0-music\misc-AAC\1980s\A-Ha - Take On Me.m4a и игроки (телефон и ПК в синхронизированном зеркале, вот почему) предпочли бы (относительный путь) misc-AAC\1980s\A-Ha - Take On Me.m4a и я не знаю, как настроить.... помогите @Magoo пожалуйста!! - person alex; 12.02.2015