Dies sollte tun, was Sie wollen. Speichern Sie es als "mkvmerger.bat" und geben Sie es zusammen mit mkvmerge.exe in den Pfad ein
Ich habe das ursprünglich geschrieben, um etwas sehr ähnliches mit ffmpeg zu machen. Im Grunde werden Dateien mit einer Handvoll bestimmten Dateitypen (avi, m4v, mkv, mp4, mpeg, mpegts, mpg) gesucht und an mkvmerger zurückgegeben, die dann nach Dateien mit demselben Basisnamen, aber unterschiedlichen spezifischen Erweiterungen (srt, idx) sucht, sub, ogg, mp3, aac) und fügt sie der Argumentliste hinzu. Dann ist alles an mkvmerge übergeben, um die Arbeit zu erledigen. Ich verwende mkvmerge nicht, daher weiß ich nicht, ob Sie sowohl idx als auch sub übergeben müssen. Versuchen Sie es also so wie es ist, und wenn Sie Probleme haben, versuchen Sie es nur mit dem einen oder dem anderen (entfernen Sie die fehlerhafte Zeile ).
@ECHO OFF ::'=========================================================== :: mkvmerger.bat :: mkvmerge recipe. :: :: Written by Shawn K. Hall :: ::'=========================================================== ::setlocal enableDelayedExpansion ::'=========================================================== where /q mkvmerge.exe IF NOT "%errorlevel%"=="0" GOTO nomkvmerge ::'=========================================================== ::'=========================================================== :input ::'=========================================================== :: defaults IF "%mkvTargetDir%"=="" SET mkvTargetDir=Done\ IF "%~1"=="" GOTO all GOTO next ::'=========================================================== ::'=========================================================== :next IF /I "%~1"=="*" SHIFT&&GOTO all IF /I "%~1"=="all" SHIFT&&GOTO all IF /I "%~1"=="" GOTO done SET inparam=%~1 IF "%~1"=="" GOTO none SET inparam2=%inparam:^*=% IF NOT "%inparam2%"=="%inparam%" SHIFT&&GOTO many SET inparam2= GOTO process ::'=========================================================== ::'=========================================================== :all FOR %%x IN ("avi" "m4v" "mkv" "mp4" "mpeg" "mpegts" "mpg") DO ( IF EXIST *.%%x FORFILES /M *.%%x /c "cmd /c CALL mkvmerger.bat ^"@file^"" ) GOTO next ::'=========================================================== ::'=========================================================== :many IF EXIST "%inparam%" FORFILES /M %inparam% /c "cmd /c CALL mkvmerger.bat ^"@file^"" GOTO next ::'=========================================================== ::'=========================================================== :destexists ECHO. The destination file already exists: ECHO. "%mkvTarget%" ECHO. Are you sure you haven't already processed this file^? ECHO. GOTO done ::'=========================================================== ::'=========================================================== :none ECHO. Error: You must pass the source video file or "^*" as an argument. ECHO. GOTO done ::'=========================================================== ::'=========================================================== :nomkvmerge ECHO. Error: mkvmerge is either not installed or is not in the path. ECHO. GOTO done ::'=========================================================== ::'=========================================================== :process SET mkvSources=%~1 SET mkvTarget= SET mkvTargetName=%~n1 SET mkvTargetExt=.mkv SET "mkvTarget=%mkvTargetDir%\%mkvTargetName%%mkvTargetExt%" IF EXIST "%mkvTarget%" GOTO destexists IF NOT EXIST "%mkvTargetDir%" MKDIR "%mkvTargetDir%" ECHO. ECHO.Starting with "%mkvTarget%" :processing IF EXIST "%mkvTargetName%.srt" SET "mkvSources=%mkvSources% %mkvTargetName%.srt" IF EXIST "%mkvTargetName%.idx" SET "mkvSources=%mkvSources% %mkvTargetName%.idx" IF EXIST "%mkvTargetName%.sub" SET "mkvSources=%mkvSources% %mkvTargetName%.sub" IF EXIST "%mkvTargetName%.ogg" SET "mkvSources=%mkvSources% %mkvTargetName%.ogg" IF EXIST "%mkvTargetName%.mp3" SET "mkvSources=%mkvSources% %mkvTargetName%.mp3" IF EXIST "%mkvTargetName%.aac" SET "mkvSources=%mkvSources% %mkvTargetName%.aac" mkvmerge.exe -o "%mkvTarget%" %mkvSources% :processingDone ECHO.Done with "%mkvTarget%" ECHO. GOTO done ::'=========================================================== ::'=========================================================== :done