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

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

Старожил


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

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


Для тестирования я использовал вот такой плейлист
Код: Выделить весь код
<Test:-1>
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\01 - Равновесие.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Равновесие|210782|8432434|01/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\02 - Аббат Джон.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Аббат Джон|222249|8891144|02/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\03 - Чёрная смерть.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Чёрная смерть|180244|7210948|03/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\04 - Баллада о реке Шэннон.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Баллада о реке Шэннон|198765|7951781|04/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\99 - Test.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Test|999999|8606932|99/99|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\05 - Аконит.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Аконит|215144|8606932|05/05|2010|44100|320|2
и вот такой индекс-файл с новыми путями и длительностью, составление которого остается за вами - у меня нету консольных утилит под windows, умеющих выдавать длительность в милисекундах
Код: Выделить весь код
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Равновесие.mp3|[210782]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Аббат Джон.mp3|[222249]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Чёрная смерть.mp3|[180244]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Баллада о реке Шэннон.mp3|[198765]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Аконит.mp3|[215144]
Как видите, его формат прост - Путь|[Длительность, в мсек]
В плейлист специально внесена ошибка - трек, который отсутствует в индекс-файле. Обработка осуществляется следующим скриптом:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

Set OldPList=test.plc
Set Output=new.plc
Set IndexFile=index.txt

rem Переписываем заголовок файла в новый плейлист
For /F "usebackq delims=" %%A In ("%OldPList%") Do (
    Echo %%A>"%Output%"
    GoTo Break
)
:Break

rem Разбираем строки старого плейлиста на составляющие
Echo Processing "%OldPList%"...
For /F "usebackq skip=1 tokens=1,2,3,4,5,6,7,8,9,10,11,12 delims=^|" %%A In ("%OldPList%") Do (
    Set NewFilePath=
rem Ищем строку с таким же временем в индекс-файле
    For /F "tokens=1 delims=^|" %%P In ('Type "%IndexFile%"^|Find "[%%G]"') Do (
        Set NewFilePath=%%P
    )
	Echo Search for %%C - %%F
rem Генерируем строку нового плейлиста или пишем старую с добавкой пометки
rem В случае успешного поиска совпадения меняем только путь, в случае ошибки
rem дописываем ERROR к отображаемому имени
    If Not "!NewFilePath!"=="" (
        Echo %%A^|!NewFilePath!^|%%C^|%%D^|%%E^|%%F^|%%G^|%%H^|%%J^|%%K^|%%L>>"%Output%"
    ) Else (
        Echo %%A^|%%B^|ERROR %%C^|%%D^|%%E^|ERROR %%F^|%%G^|%%H^|%%J^|%%K^|%%L>>"%Output%"
	Echo    ERROR: "%%G" not found in %IndexFile%
    )
)
Echo All done
Pause
Важно! И старый плейлист, и индекс-файл, и батник должны быть в одинаковой кодировке. У плейлистов .plc это UTF-16 LE, батник в такой кодировке недопустим, поэтому я выбрал UTF-8 без BOM и перевел все три файла в неё. После запуска батник генерирует новый плейлист, в точности повторяющий старый, только с исправленными путями. Там, где соответствия не найдено (помните умышленно внесённую в тестовый плейлист ошибку?) к имени и исполнителю дописывается ERROR, что четко видно при просмотре плейлиста аимпом. После этого не забудьте перевести свежесозданный плейлист в его оригинальную кодировку, иначе вас ждут проблемы с кириллическими именами файлов и путями.

Последний раз редактировалось Anonymоus, 29-05-2012 в 17:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:13, 29-05-2012 | #11