如何通过批处理 mkvEXTRACT.exe 特定曲目?

how to mkvEXTRACT.exe specific tracks via batch?

所以这是交易......我正在尝试使用 mkvextract.exe 通过批处理脚本从 mkv 容器中提取特定曲目,我能想到的唯一方法是通过批处理和提取部分曲目其余的手动(这花费了我很多时间)。实际上有更好、更聪明、更快的方法来实现这一目标吗?我需要提取的是:

文件夹"subs"
中所有带有原名的字幕轨道 文件夹 "atchmnts" 中所有具有原始名称的附件(更新:我管理了这个)
并且在文件夹 "xml" 中使用 XML 格式的原始名称跟踪章节(更新:完成 xDeathwing。不过,它不是最初要求的原始文件名,在这种情况下没问题,因为每个 mkv 总是有 1 xml 个文件)

到目前为止我同意这个:


@echo off
mkvextract.exe attachments "video.mkv" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
mkvextract.exe chapters "video.mkv" --redirect-output chapters.xml
mkvextract.exe --ui-language en tracks "video.mkv" 0:"%CD%\%~sub.ass" <b>(Update: this one 
actually working, but I can extract only one track instead of all of them and also its not 
keeping original filename as given by mkvextract - "video_track4_eng.ass" - and also 
I assume this will work only if track ID/language was defined during muxing process)</b>

md "atchmnts"
md "subs"
md "xml"

move "*.ttf" "atchmnts\"
move "*.otf" "atchmnts\"
move "*.png" "atchmnts\"

move "*.srt" "subs\"
move "*.ass" "subs\"
move "*.sub" "subs\"

move "*.xml" "xml\"

pause
exit

我知道 https://mkvtoolnix.download/doc/mkvextract.html,但无法真正找到我要找的东西并修复我的脚本。

将以上所有内容提取到一个文件夹中,然后通过 dir 命令循环将所有文件移动到相关文件夹是一种选择

这里我为 .xml .sub 和 .ext 编写了一个小的批处理文件 您可以自由编辑脚本 如果需要,我也可以添加删除剩下的选项 这个批处理文件也可以变成一个更通用的文件,它带有变量

@Echo off
if NOT exist xml md xml
if NOT exist subs md subs
if NOT exist atchmnts md atchmnts

set i=1&set j=1&set k=1
setlocal enabledelayedexpansion

for /F %%a IN ('dir /b') do (
if /I %%~xa==.xml set "xml[!i!]=%%~a"&&set /a i+=1
if /I %%~xa==.sub set "sub[!j!]=%%~a"&&set /a j+=1
if /I %%~xa==.ext set "ext[!k!]=%%~a"&&set /a k+=1
)

set /a i-=1&set /a j-=1& set /a k-=1

if %i% GTR 0 echo xml
for /L %%i in (1,1,%i%) do echo %%i- "!xml[%%i]!"&&move %~dp0\!xml[%%i]! %~dp0\xml

if %j% GTR 0 echo sub
for /L %%i in (1,1,%j%) do echo %%i- "!sub[%%i]!"&&move %~dp0\!sub[%%i]! %~dp0\sub

if %k% GTR 0 echo ext
for /L %%i in (1,1,%k%) do echo %%i- "!ext[%%i]!"&&move %~dp0\!ext[%%i]! %~dp0\ext

pause