|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] He все условия работают |
|
CMD/BAT - [решено] He все условия работают
|
Пользователь Сообщения: 53 |
Профиль | Отправить PM | Цитировать 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 set MediaInfo=MediaInfo set mkvmerge=mkvmerge for /d %%D in (Process\*) do ( for /f "delims=" %%X in ('dir /s/b "%%D\*.mkv" "%%D\*.mp4"') do ( for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%X""') do ( for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%X""') do ( for /f "delims=) tokens=1" %%T in ("%%D") do ( if '%%M'=='CFR' ( if '%%R'=='23.976' move "%%X" "%%~nxT)%%~xX" if exist "%%D\*.srt" ( move "%%D\*.srt" "%%~nxT).srt" ) else ( if not exist "%%R" ( md "%%R"&move "%%X" "%%R\%%~nxT)%%~xX" if exist "%%D\*.srt" (move "%%D\*.srt" "%%R\%%~nxT).srt") ) else ( if '%%R'=='23.976' ( %mkvmerge% -o "%%~nxT).mkv" --default-duration 0:%%Rfps "%%X" ) else ( if not exist "%%R" md "%%R"&%mkvmerge% -o "%%R\%%~nxT).mkv" --default-duration 0:%%Rfps "%%X"))))))))) |
|
Отправлено: 19:06, 06-03-2021 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:24, 06-03-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Masutin:
тогда это: ни к чему --- далее, если работа с несколькими файлами, а оно так и есть, то строки: (в реалии они так выглядят) будут давать ошибку типа: Перемещение нескольких файлов в один ну и ниже все ломается по цепочке. Короче надо сделать так. Пишите алгоритм с указанием желаемых имен, задачу с указанием существующих папок с файлами, для папки "Process" выполните: и выложите содержимое файла после этого будем о чем-то говорить. |
|
Отправлено: 04:52, 09-03-2021 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать я не буду разбирать эту кашу, мне нужны ответы на мои вопросы. Имея четкий алгоритм я легко составлю код, вы просто тяните время и мое терпение.
|
Отправлено: 03:49, 11-03-2021 | #4 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать 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. |
|
Отправлено: 05:33, 12-03-2021 | #5 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать алгоритм конечно тот еще, бессвязный, неточный, имена все обобщены (ну сочту на то что составлялся пол пятого утра), например как может быть: d:\Mr. Nobody (2009).mkv, какое же следующее имя подобного файла?
я делал: d:\Mr. Nobody (2009)_A.mkv d:\Mr. Nobody (2009)_B.mkv c srt не совсем понятно, я искал по всей глубине и сравнивал по имени из пути с одноименными искомыми, но есть вероятность совпадения имен, если по глубине есть несколько одинаковых по имени файлов, это уже не учитывал. поставил пока copy вместо move @echo off set "dI=D:\Process" set "dO=D:" for /f "delims=" %%F in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do ( for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%F""') do ( for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%F""') do ( if "%%M"=="VFR" if "%%R"=="23.976" ( for /f "delims=" %%f in ('"echo Команда на преобразование "%%F" из VFR в CFR"') do ( call :#1 "%%f" "%dI%" "%dO%" ) ) if "%%M"=="CFR" if "%%R"=="23.976" ( call :#1 "%%F" "%dI%" "%dO%" ) if "%%M"=="VFR" if not "%%R"=="23.976" ( for /f "delims=" %%f in ('"echo Команда на преобразование "%%F" не понял во что"') do ( call :#2 "%%f" "%dI%" "%dO%" "%%R" ) ) if "%%M"=="CFR" if not "%%R"=="23.976" ( call :#2 "%%F" "%dI%" "%dO%" "%%R" ) ) ) ) pause& exit :#1 [full *.(mkv,mp4)] [D:\Process] [D:] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( copy "%~1" "%~3\%%~na(%%b)_%~nx1" for /f "delims=" %%F in ('dir /a-d/b/s "%~2\*.srt"') do if exist "%%~dpF%~n1%%~xF" (copy "%%F" "%~3\%%~na(%%b)_%%~nxF") ) exit /b :#2 [full *.(mkv,mp4)] [D:\Process] [D:] [no=23.976] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( if not exist "%~3\%~4" md "%~3\%~4" copy "%~1" "%~3\%~4\%%~na(%%b)_%~nx1" for /f "delims=" %%F in ('dir /a-d/b/s "%~2\*.srt"') do if exist "%%~dpF%~n1%%~xF" (copy "%%F" "%~3\%~4\%%~na(%%b)_%%~nxF") ) exit /b |
Последний раз редактировалось alpap, 13-03-2021 в 03:14. Отправлено: 01:30, 13-03-2021 | #6 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать move работает. Нужна помощь c командой преобразования.
Из-за %%FrameRate %%X вместо %%F. for /f "delims=" %%X in ('dir /a-d/b/s "%dI%\*.mkv" "%dI%\*.mp4"') do ( for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%X""') do ( for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%X""') do ( if "%%M"=="VFR" if "%%R"=="23.976" ( call :#1 "%%X" "%dI%" "%dO%" ) ) ) ) pause& exit :#1 [full *.(mkv,mp4)] [D:\Process] [D:] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( mkvmerge -o "%~3\%%~na (%%b).mkv" --default-duration 0:23.976fps "%~1" ) exit /b call :#1 "%%F" "%dI%" "%dO%" Один call для разных аргументов и команд? Так можно и надо? |
Отправлено: 02:28, 15-03-2021 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 03:52, 15-03-2021 | #8 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать Работает.
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 ( for /f "delims=" %%M in ('"%MediaInfo% --Inform=Video;%%FrameRate_Mode%% "%%X""') do ( for /f "delims=" %%R in ('"%MediaInfo% --Inform=Video;%%FrameRate%% "%%X""') do ( if "%%M"=="VFR" if "%%R"=="23.976" ( call :#1 "%%X" "%dI%" "%dO%" ) if "%%M"=="CFR" if "%%R"=="23.976" ( call :#2 "%%X" "%dI%" "%dO%" ) if "%%M"=="VFR" if not "%%R"=="23.976" ( call :#3 "%%X" "%dI%" "%dO%" "%%R" ) if "%%M"=="CFR" if not "%%R"=="23.976" ( call :#4 "%%X" "%dI%" "%dO%" "%%R" ) ) ) ) :#1 [full *.(mkv,mp4)] [D:\Process] [D:] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( %mkvmerge% -o "%~3\%%~na (%%b).mkv" --default-duration 0:23.976fps "%~1" for /f "delims=" %%S in ('dir /a-d/b/s "%~2\*.srt"') do if exist "%%S" ( if %%~zS GTR 999 move "%%S" "%~3\%%~na (%%b).srt") ) exit /b :#2 [full *.(mkv,mp4)] [D:\Process] [D:] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( move "%~1" "%~3\%%~na (%%b)%%~xX" ) exit /b :#3 [full *.(mkv,mp4)] [D:\Process] [D:] [not 23.976] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( if not exist "%~3\%~4" md "%~3\%~4" %mkvmerge% -o "%~3\%~4\%%~na (%%b).mkv" --default-duration 0:%~4fps "%~1") ) exit /b :#4 [full *.(mkv,mp4)] [D:\Process] [D:] [not 23.976] for /f "tokens=1,2 delims=()" %%a in ("%~1") do ( if not exist "%~3\%~4" md "%~3\%~4" move "%~1" "%~3\%~4\%%~na (%%b)%%~xX" ) exit /b |
Отправлено: 19:02, 17-03-2021 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Masutin:
Цитата Masutin:
|
||
Отправлено: 22:56, 17-03-2021 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Не работают все браузеры | Ashes | Лечение систем от вредоносных программ | 8 | 30-11-2017 09:37 | |
Звук - Странно работают не все колонки, но в проверке по месту все в норме | Andre4s11 | Прочее железо | 0 | 08-03-2015 18:06 | |
2010 - Хочу все знать о WORD 2010 часть 7: нет работают все словоформы и т.д. | test2235 | Microsoft Office (Word, Excel, Outlook и т.д.) | 6 | 04-11-2013 18:30 | |
Не работают все ОЗУ | 1dima93 | Материнские платы и память | 1 | 02-09-2013 23:13 | |
Не работают все USB. | vladim33 | Материнские платы и память | 6 | 06-03-2012 09:46 |
|