[CMD] Добавление треков в плейлист m3u

lovatorx

Новый пользователь
Сообщения
6
Реакции
1
Добрый день помогите со скриптом cmd.
у меня есть готовый аудио плейлист и мне нужно добавить в него несколько треков.
Грубо говоря у меня есть 3 трека которые нужно по очереди вставить через каждых 5 текущих треков до конца моего плейлиста вот пример который мне нужно получить.
это треки которые мне нужно добавить в плейлист New_Audio01.mp3, New_Audio02.mp3, New_Audio03.mp3
желательно в переменной добавлять новые треки которые нужно вставить в плейлист
Код:
#EXTM3U
#EXTINF:0,Track1.mp3
Track1.mp3

#EXTINF:0,Track2.mp3
Track2.mp3

#EXTINF:0,Track3.mp3
Track3.mp3

#EXTINF:0,Track4.mp3
Track4.mp3

#EXTINF:0,Track5.mp3
Track5.mp3

#EXTINF:0,New_Audio01.mp3
New_Audio01.mp3

#EXTINF:0,Track6.mp3
Track6.mp3

#EXTINF:0,Track7.mp3
Track7.mp3

#EXTINF:0,Track8.mp3
Track8.mp3

#EXTINF:0,Track9.mp3
Track9.mp3

#EXTINF:0,Track10.mp3
Track10.mp3

#EXTINF:0,New_Audio02.mp3
New_Audio02.mp3

#EXTINF:0,Track11.mp3
Track11.mp3

#EXTINF:0,Track12.mp3
Track12.mp3

#EXTINF:0,Track13.mp3
Track13.mp3

#EXTINF:0,Track14.mp3
Track14.mp3

#EXTINF:0,Track15.mp3
Track15.mp3

#EXTINF:0,New_Audio03.mp3
New_Audio03.mp3

#EXTINF:0,Track16.mp3
Track16.mp3

#EXTINF:0,Track17.mp3
Track17.mp3

#EXTINF:0,Track18.mp3
Track18.mp3

#EXTINF:0,Track19.mp3
Track9.mp3

#EXTINF:0,Track20.mp3
Track20.mp3

#EXTINF:0,New_Audio01.mp3
New_Audio01.mp3

#EXTINF:0,Track21.mp3
Track21.mp3

#EXTINF:0,Track22.mp3
Track22mp3

#EXTINF:0,Track23.mp3
Track23.mp3

#EXTINF:0,Track24.mp3
Track24.mp3

#EXTINF:0,Track25.mp3
Track25.mp3

#EXTINF:0,New_Audio02.mp3
New_Audio02.mp3

#EXTINF:0,Track26.mp3
Track26.mp3

#EXTINF:0,Track27.mp3
Track27mp3

#EXTINF:0,Track28.mp3
Track28.mp3

#EXTINF:0,Track29.mp3
Track29.mp3
 
вот пытался сделать скрипт но не знаю как зациклить добавление по порядку нужных мне треков до конца плейлиста , мне нужно обрабатывать разные по строкам плейлисты.
Код:
@echo off
setlocal enabledelayedexpansion

set "playlist=playlist.m3u"
set "new_song1=New_Audio01.mp.mp3"
set "new_song2=New_Audio02.mp.mp3"
set "new_song3=New_Audio03.mp.mp3"
set "new_playlist=new_playlist.m3u"

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%playlist%"') do (
  set "line=%%b"
  if %%a equ 16 (
    echo.
    echo.#EXTINF:0,!new_song1!
    echo.!new_song1!
    echo.
  ) else if %%a equ 31 (
    echo.
    echo.#EXTINF:0,!new_song2!
    echo.!new_song2!
    echo.
  ) else if %%a equ 46 (
    echo.
    echo.#EXTINF:0,!new_song3!
    echo.!new_song3!
    echo.
  ) else (
    echo(!line!
  )
)) > "%new_playlist%"
 
Не совсем понял логику, но примерно так
CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "playlist=playlist.m3u"
set "new_song1=New_Audio01.mp.mp3"
set "new_song2=New_Audio02.mp.mp3"
set "new_song3=New_Audio03.mp.mp3"
set "new_playlist=new_playlist.m3u"

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%playlist%"') do (
  set "line=%%b"
 
  echo(!line!
 
  rem если строка находится на позиции, которая кратна 5 (не включая первые 5 строк),
  rem то добавляем все три новых песни в новый плейлист
  set /a "remainder=%%a%%5"
  if !remainder! equ 0 (
    echo.
    echo.#EXTINF:0,!new_song1!
    echo.!new_song1!
    echo.
    echo.#EXTINF:0,!new_song2!
    echo.!new_song2!
    echo.
    echo.#EXTINF:0,!new_song3!
    echo.!new_song3!
    echo.
  )
)) > "%new_playlist%"
 
Получилось :)

batch:
@echo off
setlocal enabledelayedexpansion

set "playlist=playlist.m3u"
set "new_song1=song1.mp3"
set "new_song2=song2.mp3"
set "new_song3=song3.mp3"
set "new_playlist=new_playlist.m3u"

set /a count=1
set "new_song=!new_song1!"
(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%playlist%"') do (
  set "line=%%b"
  echo(!line!
  if !count! equ 15 (
    echo.
    echo.#EXTINF:0,!new_song!
    echo.!new_song!
    set /a count=0
    if "!new_song!"=="!new_song1!" (
      set "new_song=!new_song2!"
    ) else if "!new_song!"=="!new_song2!" (
      set "new_song=!new_song3!"
    ) else (
      set "new_song=!new_song1!"
    )
  )
  set /a count+=1
)) > "%new_playlist%"
 
Последнее редактирование:
@akok,
помогите с переменной, чтобы изменить только одну строку (пример
Код:
 "list_song=song1.mp3*song2.mp3*song3.mp3*song4.mp3*song5.mp3"
)
при добавлении или удаления трека

к примеру если я захочу добавить song4.mp3

то нужно еще добавить и это
CMD/BATCH:
set "new_song3=song4.mp3"

CMD/BATCH:
      set "new_song=!new_song4!"
    ) else if "!new_song!"=="!new_song4!" (
 
Последнее редактирование:
CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "playlist=playlist.m3u"   REM Указываем имя исходного плейлиста
set "new_songs=song1.mp3 song2.mp3 song3.mp3 song4.mp3"   REM Определяем новые песни, разделяя их пробелами
set "new_playlist=new_playlist.m3u"   REM Указываем имя нового плейлиста

set /a count=1   REM Инициализируем счетчик строк
set "new_song=!new_songs: =!"   REM Удаляем пробелы из списка новых песен

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%playlist%"') do (
  set "line=%%b"   REM Сохраняем текущую строку в переменную line
  echo(!line!   REM Выводим текущую строку в новый плейлист
  if !count! equ 15 (   REM Если строка 15
    echo.   REM Выводим пустую строку
    echo.#EXTINF:0,!new_song!   REM Выводим информацию о новой песне
    echo.!new_song!   REM Выводим имя новой песни
    set /a count=0   REM Сбрасываем счетчик строк
    for %%s in (!new_songs!) do (   REM Перебираем список новых песен
      if "%%s"=="!new_song!" (   REM Если текущая песня найдена в списке новых песен
        set "new_song_found=true"   REM Устанавливаем флаг, указывающий, что текущая песня найдена
      )
      if defined new_song_found (   REM Если флаг установлен
        set "new_song=%%s"   REM Устанавливаем имя следующей новой песни
        set "new_song_found="   REM Сбрасываем флаг
        goto :break_for   REM Выходим из внутреннего цикла
      )
    )
    :break_for   REM Метка для выхода из внутреннего цикла
  )
  set /a count+=1   REM Увеличиваем счетчик строк на 1
)) > "%new_playlist%"   REM Перенаправляем вывод в новый плейлист
 
Последнее редактирование:
не заработал
Код:
Отсутствующий оператор.
Непредвиденное появление: ).
в 11 строчке (for открывается, но не закрывается на 32ой. Не уверен нужно ли там во все открытие ( т.к. синтаксиса не знаю.
Попробуйте так (Если не сработает, то попробуйте как раз убрать в 11 строчке открывающую скобку перед for:
CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "playlist=playlist.m3u"   REM Указываем имя исходного плейлиста
set "new_songs=song1.mp3 song2.mp3 song3.mp3 song4.mp3"   REM Определяем новые песни, разделяя их пробелами
set "new_playlist=new_playlist.m3u"   REM Указываем имя нового плейлиста

set /a count=1   REM Инициализируем счетчик строк
set "new_song=!new_songs: =!"   REM Удаляем пробелы из списка новых песен

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%playlist%"') do (
  set "line=%%b"   REM Сохраняем текущую строку в переменную line
  echo(!line!   REM Выводим текущую строку в новый плейлист
  if !count! equ 15 (   REM Если строка 15
    echo.   REM Выводим пустую строку
    echo.#EXTINF:0,!new_song!   REM Выводим информацию о новой песне
    echo.!new_song!   REM Выводим имя новой песни
    set /a count=0   REM Сбрасываем счетчик строк
    for %%s in (!new_songs!) do (   REM Перебираем список новых песен
      if "%%s"=="!new_song!" (   REM Если текущая песня найдена в списке новых песен
        set "new_song_found=true"   REM Устанавливаем флаг, указывающий, что текущая песня найдена
      )
      if defined new_song_found (   REM Если флаг установлен
        set "new_song=%%s"   REM Устанавливаем имя следующей новой песни
        set "new_song_found="   REM Сбрасываем флаг
        goto :break_for   REM Выходим из внутреннего цикла
      )
    )
    :break_for   REM Метка для выхода из внутреннего цикла
  )
  set /a count+=1   REM Увеличиваем счетчик строк на 1
)) > "%new_playlist%")   REM Перенаправляем вывод в новый плейлист
 
Последнее редактирование:
Поправил, break_for не позволял корректно завершить цикл.
CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "playlist=playlist.m3u"
set "new_songs=song1.mp3 song2.mp3 song3.mp3 song4.mp3"
set "new_playlist=new_playlist.m3u"

set /a count=1
set "new_song=!new_songs: =!"

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%playlist%"') do (
  set "line=%%b"
  echo(!line!
  if !count! equ 15 (
    echo.
    echo.#EXTINF:0,!new_song!
    echo.!new_song!
    set /a count=0
    for %%s in (!new_songs!) do (
      echo Checking song %%s...
      if "%%s"=="!new_song!" (
        echo Found new song: %%s
        set "new_song_found=true"
        goto :break_for
      )
    )
    :break_for
    set "new_song=!new_songs:~0,-4!"
  )
  set /a count+=1
)) > "%new_playlist%"
 
Последнее редактирование:
вот какой результат получается

Код:
#EXTM3U
#EXTINF:0,Track1.mp3
Track1.mp3

#EXTINF:0,Track2.mp3
Track2.mp3

#EXTINF:0,Track3.mp3
Track3.mp3

#EXTINF:0,Track4.mp3
Track4.mp3

#EXTINF:0,Track5.mp3
Track5.mp3

#EXTINF:0,song1.mp3song2.mp3song3.mp3song4.mp3
song1.mp3song2.mp3song3.mp3song4.mp3
Checking song song1.mp3...
Checking song song2.mp3...
Checking song song3.mp3...
Checking song song4.mp3...

#EXTINF:0,Track6.mp3
Track6.mp3

#EXTINF:0,Track7.mp3
Track7.mp3

#EXTINF:0,Track8.mp3
Track8.mp3

#EXTINF:0,Track9.mp3
Track9.mp3

#EXTINF:0,Track10.mp3
Track10.mp3

#EXTINF:0,song1.mp3 song2.mp3 song3.mp3 song4
song1.mp3 song2.mp3 song3.mp3 song4
Checking song song1.mp3...
Checking song song2.mp3...
Checking song song3.mp3...
Checking song song4.mp3...
 
Назад
Сверху Снизу