Найти все файлы MKV и удалить все субтитры

В настоящее время я смотрю программу Windows под названием mkvmerge . Я хотел бы создать пакетный файл, чтобы найти все MKV-файлы рекурсивно с указанного пути и удалить все субтитры из найденных MKV-файлов (если найденный MKV содержит субтитры), наконец, удалив все исходные файлы MKV, у которых были удалены субтитры.

Я сделал около 2 часов работы в Интернете, и я обнаружил, что вы должны писать такие вещи:

FOR /F "delims=*" %%A IN ('dir /b *.MKV') DO "C:\mkvmerge.exe" -o "fixed_%%A" -a 4 -s 7 --compression -1:none "%%A" 

Я все еще пытаюсь, но если кто-то может мне немного помочь, я бы очень признателен.

  • Как автоматически войти в систему после сна
  • WUDFHost.exe постоянно на 12-20% CPU
  • Почему программа под названием «C: \ Program» влияет на другие программы?
  • Фон экрана входа в Windows 10
  • Apache 2.4 в Windows реагирует медленно, зависает при обслуживании некоторых динамических страниц
  • Скопировать-вставить через RDP, ограничение размера файла?
  • Как отправить событие переключения раскладки клавиатуры с помощью autohotkey в Windows 7?
  • Remap Caps Lock для AltGr / Alt + Ctrl в Windows?
  • 2 Solutions collect form web for “Найти все файлы MKV и удалить все субтитры”

    Сохраните следующее как нечто вроде DelMKVSubs.bat в том же каталоге, в котором находится mkvmerge.exe , отредактируйте переменную корневого каталога в соответствии с вашими требованиями и запустите пакетный файл:

     @echo off cls set rootfolder=C:\ echo Enumerating all MKVs under %rootfolder% echo. for /r %rootfolder% %%a in (*.mkv) do ( for /f %%b in ('mkvmerge -i "%%a" ^| find /c /i "subtitles"') do ( if [%%b]==[0] ( echo "%%a" has no subtitles ) else ( echo. echo "%%a" has subtitles mkvmerge -q -o "%%~dpna (No Subs)%%~xa" -S "%%a" if errorlevel 1 ( echo Warnings/errors generated during remuxing, original file not deleted ) else ( del /f "%%a" echo Successfully remuxed to "%%~dpna (No Subs)%%~xa", original file deleted ) echo. ) ) ) 

    Пакетный файл должен быть достаточно прост, чтобы понять, но вот обзор:

    1. Он использует for /r рекурсивно поиск %rootfolder% для всех MKV

    2. Затем он запускает mkvmerge -i на каждом MKV, чтобы проверить, существует ли трек субтитров

    3. Если MKV содержит дорожки субтитров, он запускает mkvmerge mkvmerge -S для воспроизведения файла при пропуске всех таких дорожек

    4. Наконец, он проверяет код выхода mkvmerge, и если этот (т.е. уровень errorlevel ) равен 0, указывающий успех без предупреждений / ошибок, он удаляет исходный файл

    Подробнее см. Документацию mkvmerge, а также for /? , if /? И т. Д. В командной строке.

    Спасибо, Каран, это было очень полезно для меня. Я изменил свой сценарий, чтобы теперь вы могли выбрать язык (указанный 3LC (eng, ned, swe и т. Д.)) Для субтитров, которые вы хотели бы сохранить. Кроме того, я удалил часть, в которой файлы ввода удалены, и решил добавить суффикс в выходной файл.

    Вот моя версия:

     :: remux all mkvs under a certain subfolder with all subitles :: but those as specified by %language% parameter removed. @echo off setlocal enabledelayedexpansion :: set your variables here set rootfolder="C:\temp\New folder" set language=eng set suffix= (eng sub) :: do the remuxing echo Remuxing all mkvs in %rootfolder% and its subfolders. for /r %rootfolder% %%a in (*.mkv) do ( set subs= set mkv=%%a for /f "tokens=3 delims=: " %%b in ('mkvmerge -I "%%a" ^| findstr /i /r ".*subtitles.*language:%language%.*"') do ( set subs=!subs!,%%b ) for /f "tokens=*delims=," %%c in ("!subs!") do ( set subs=%%c ) if not exist "%%~dpna%suffix%%%~xa" if not "!subs!"=="" ( mkvmerge -q -o "%%~dpna%suffix%%%~xa" -s !subs! "%%a" if errorlevel 1 ( echo Warnings/errors generated during remuxing of "%%a". ) else ( echo Successfully remuxed to "%%~dpna (eng subs)%%~xa". ) ) else ( echo Input file "%%a" has no subtitles in %language% or output file "%%~dpna%suffix%%%~xa" already exists. Skipping this file. ) ) pause 
    Давайте будем гением компьютера.