Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Новый участник


Сообщения: 40
Благодарности: 0

Профиль | Отправить PM | Цитировать


alb=txt
Весь скрипт должен отталкиваться от ini-файла в абзаце 5.

1. Есть коллекция музыки, распределенная в папках по стилям.
Цитата:
F:\Music\Chillout_2
F:\Music\Trance_4
F:\Music\Rock_5
F:\Music\*_*
2. Есть папки с плейлистами, из которой мой плеер берет информацию для эфира
Цитата:
E:\Air\playlists\one
E:\Air\playlists\two
E:\Air\playlists\three
E:\Air\playlists\four
E:\Air\playlists\*
3. В каждой папке "E:\Air\playlists\*" есть подпапка "elements" и файл MAIN.alb

В принципе уже есть скрипт "Windows Batch file", который создает из коллекции готовые плейлисты, но учитывая весь объем задания, скорее всего его придется переписывать под другой язык
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
>nul chcp 1251
 
set "src=F:\Music"
set "dest=F:\MPL"
set "files=*.mp3"
set "playlistext=.alb"
 
2>nul (md "%dest%"
for /f "delims=" %%i in ('dir/ad/b "%src%"') do >"%dest%\%%i%playlistext%" dir/a-d/b/s "%src%\%%i\%files%")
For %%a in (F:\MPL\*.alb) do md "F:\MPL\%%~na"& move "%%~a" "F:\MPL\%%~na"
 
for /f "tokens=*" %%i in ('dir /b /s F:\MPL\*.alb') do (
 
    for /f "tokens=*" %%j in ('type "%%i"') do call:set_random "%%j"
    call:set_content "%%i"
 
)
 
goto:eof
 
:set_random
set "line_%random%=%~1"
goto:eof
 
:set_content
 
1>%1 (
 
for /f "tokens=2* delims==" %%i in ('set line_') do echo %%i
 
)
 
for /f "tokens=1 delims==" %%i in ('set line_') do set "%%i="


Этот скрипт опираясь на структуру папок в "F:\Music" создает в папке "F:\MPL" такую же структуру директорий и в каждую подпапку кладет плейлист с таким же именем, как и у подпапки.
На выходе получается

Цитата:
F:\MPL\Chillout_2\chillout_2.alb
F:\MPL\Trance_4\Trance_4.alb
F:\MPL\Rock_5\Rock_5.alb
F:\MPL\*_*\*_*.alb
ВАЖНО!!! Как видно из кода, эти плейлисты создаются уже перемешанными, то есть с функцией "random".

4. У каждого созданного плейлиста в имени есть цифровой тег "_*". Этот тег задает количество миниплейлистов, на которое должен быть разбит плейлист. То есть, если у нас есть "F:\MPL\Chillout_2\chillout_2.alb" на "х" строк, то из него должно получится "F:\MPL\Chillout_2\chillout 01.alb" на "Х/2" строк и "F:\MPL\Chillout_2\chillout 02.alb" на "х/2" строк а сам "F:\MPL\Chillout_2\chillout_2.alb" должен быть удален.
Если в теге файла кроме основного есть еще значение "с" (на пример "F:\MPL\Jazz_c_10\Jazz_c_10.alb"), то файл не разбивается на строки, а из него просто делается 10 копий с именами
Цитата:
F:\MPL\Jazz_c_10\Jazz 01.alb
F:\MPL\Jazz_c_10\Jazz 02.alb
F:\MPL\Jazz_c_10\Jazz 03.alb
.......
F:\MPL\Jazz_c_10\Jazz 10.alb
а сам "F:\MPL\Jazz_c_10\Jazz_c_10.alb" должен быть удален.

5. Перемещение. Я создам "F:\MPL\plst.ini" в котором задам соответствие такого типа
Цитата:
Music = F:\Music
Playlists = F:\MPL
E:\Air\playlists\one\elements = Chillout, New Age
E:\Air\playlists\two\elements = Chillout, Trance, New Age
E:\Air\playlists\three\elements = Trance, Jazz
E:\Air\playlists\four\elements = Jazz, Rock
и т.д.
Вот тут как бы правильно объяснить....
Для начала все папки "E:\Air\playlists\*\elements" должны очищаться.
В примерах выше я разбивал "F:\MPL\Chillout_2\chillout_2.alb" на "F:\MPL\Chillout_2\chillout 01.alb" и "F:\MPL\Chillout_2\chillout 02.alb".
В "F:\MPL\plst.ini" у нас указано, что "F:\MPL\Chillout_2\chillout 01.alb" и "F:\MPL\Chillout_2\chillout 02.alb" должны попадать в "E:\Air\playlists\one\elements" и "E:\Air\playlists\two\elements".
То есть "chillout 01.alb" перемещается в "E:\Air\playlists\one\elements", "chillout 02.alb" в "E:\Air\playlists\two\elements". И так для остальных...

6. После такого распределения у нас в папках "E:\Air\playlists\*\elements" оказывается много миниплейлистов. На пример в папке "E:\Air\playlists\two\elements" появляется три миниплейлиста ("Chillout 02.alb", "Trance 01.alb" и "New Age 02.alb").
Выше я писал, что в каждой папке "E:\Air\playlists\*" есть файл "MAIN.alb". Нам нужно файлы "Chillout 02.alb", "Trance 01.alb" и "New Age 02.alb" соединить в один, перемешать/рандомизировать его и сохранить как "E:\Air\playlists\*\MAIN.alb" заменив им старый.

Вот как-то так. Предложения в личку.

Цитата Iska:
Проблема батника при работе с текстом -- есть большая вероятность, что при попадании в раздачу спец.символов (=,&,|,%,>,<) результат может оказаться не тем, который вы ожидаете увидеть. Все это так или иначе решается, но если честно нет особого желания этого делать. »
Такого получится не может, так как я всю базу музыки предварительно прогоняю через TagScaner избавляясь не только от спецсимволов, но даже на всякий случай от букв "й" и "ё".

Цитата Iska:
насколько я понимаю, он хочет делить не по X строк, а на Y частей, то есть — посчитать количество строк в файле и разделить на эти самые Y частей. »
Абсолютно верно

Отправлено: 01:16, 29-02-2016 | #9