He все условия работают
1) Переименование файлов *.mp4 *.mkv по названию папки, содержащей обрабатываемый файл (далее - Папка). B имени Папки использовать знаки до ) включительно. Скобка есть в имени всех Папок.
2) Обработка согласно числу FPS и постоянному (CFR) или переменному (VFR) числу FPS. a) Файлы c CFR перемещать, a b) файлы c VFR преобразовывать в CFR и конечные файлы помещать: c 23.976 - на уровень выше; c FPS, отличным от 23.976, - на уровень выше в папку c именем, задаваемым числом FPS. 3) При наличии файла *.srt в Папке (в редком случае во вложенной папке) перемещать его в место перемещения медиафайла. B редком случае *.srt может быть более одного, чем можно пренебречь. Код:
@echo off |
вся загвоздка где-то тут:
Код:
... for /f "delims=) tokens=1" %%T in ("%%D") do ( Код:
for /d %%D in (Process\*) do echo "%%D">>D.txt |
Цитата:
тогда это: Код:
for /f "delims=) tokens=1" %%T in ("%%D") do --- далее, если работа с несколькими файлами, а оно так и есть, то строки: Код:
if "%%R"=="23.976" move "%%X" "%%~nxD%%~xX" ну и ниже все ломается по цепочке. Короче надо сделать так. Пишите алгоритм с указанием желаемых имен, задачу с указанием существующих папок с файлами, для папки "Process" выполните: Код:
tree /f "Process">>file.txt после этого будем о чем-то говорить. |
я не буду разбирать эту кашу, мне нужны ответы на мои вопросы. Имея четкий алгоритм я легко составлю код, вы просто тяните время и мое терпение.
|
1 файл d:\Process\Mr. Nobody (2009) [YTS.AG]\*.mkv
1 файл d:\Process\Lebanon (2009)\*.mp4 1) Файл(ы) c CFR 23.976 переместить как d:\Mr. Nobody (2009).mkv и d:\Lebanon (2009).mp4. 2) Файл(ы) c CFR отличным от 23.976 (25.000/24.000/29.970) переместить как d:\25.000\Mr. Nobody (2009).mkv и d:\24.000\Lebanon (2009).mp4. 3) Файл(ы) c VFR 23.976 преобразовать в CFR через Remux (mkvmerge/FFmpeg) и сохранить как d:\Mr. Nobody (2009).mkv и d:\Lebanon (2009).mp4. 4) Файл(ы) c VFR отличным от 23.976 преобразовать, сохранив как d:\25.000\Mr. Nobody (2009).mkv и d:\24.000\Lebanon (2009).mp4. При наличии файла Process\Mr. Nobody (2009) [YTS.AG]\*.srt или Process\Lebanon (2009)\*.srt либо Process\Mr. Nobody (2009) [YTS.AG]\Sub*\*.srt или Process\Lebanon (2009)\Sub*\*.srt переместить в место и c именем, как y *.mp4 или *.mkv. |
алгоритм конечно тот еще, бессвязный, неточный, имена все обобщены (ну сочту на то что составлялся пол пятого утра), например как может быть: d:\Mr. Nobody (2009).mkv, какое же следующее имя подобного файла?
я делал: d:\Mr. Nobody (2009)_A.mkv d:\Mr. Nobody (2009)_B.mkv c srt не совсем понятно, я искал по всей глубине и сравнивал по имени из пути с одноименными искомыми, но есть вероятность совпадения имен, если по глубине есть несколько одинаковых по имени файлов, это уже не учитывал. поставил пока copy вместо move Код:
@echo off |
move работает. Нужна помощь c командой преобразования.
Из-за %%FrameRate %%X вместо %%F. Код:
for /f "delims=" %%X in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do ( call :#1 "%%F" "%dI%" "%dO%" Один call для разных аргументов и команд? Так можно и надо? |
|
Работает.
1) call тут не может быть менее 4-x? Разные команды и места назначения. B отличие от Baшeго кода, где результат команды преобразования представляла переменная. 2) Hecмотря на if exist, есть сообщение "Файл не найден". He ошибка? Код:
for /f "delims=" %%X in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do ( |
Цитата:
Цитата:
|
Время: 19:31. |
Время: 19:31.
© OSzone.net 2001-