每次需要复用.mkv文件时,它都会带有随机数量的字幕,每个字幕都是不同的语言代码。
所以例如 场景 1:
video.mkv
eng.srt
fre.srt
ger.srt
场景 2:
video.mkv
rus.srt
spa.srt
目标是每次运行相同的批处理文件时,使其拾取大量的字幕,并使用正确的语言代码等正确复用。
到目前为止,我们到了这里:
EnableDelayedExpansion
for %%A in ("*.srt") do (
set subtitle=%%~nA
)
for %%A in ("*.mkv") do (
mkvmerge.exe -o "%%~nA.mkv" --default-track 0:yes "%%A"^
--language 0:!subtitle! --default-track 0:no "!subtitle!.srt"^
--language 0:!subtitle! --default-track 0:no "!subtitle!.srt"^
--language 0:!subtitle! --default-track 0:no "!subtitle!.srt"^
)
到目前为止,这是固定数量的字幕方法,而不是动态的,例如场景 1。它几乎可以工作,除了它选取每个字幕作为最后一个变量,因此从场景 1 开始,每个字幕被复用三次并命名为语言ger
ger.srt
三次用作源,因为它是列表中的最后一个字母表。
目标:每个!subtitle!
都应该是正确的语言和副标题,正如我所理解的那样。
我没有安装mkvmerge.exe
也没有阅读 mkvmerge 的文档,所以不知道有问题的选项是否真的正确。
下面的批处理文件创建具有可变数量的--language
和--default-track
选项的命令行,具体取决于当前目录中找到.srt
文件。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SubtitleOptions="
setlocal EnableDelayedExpansion
for %%I in (*.srt) do set "SubtitleOptions=!SubtitleOptions! --language 0:%%~nI --default-track 0:no "%%I""
endlocal & set "SubtitleOptions=%SubtitleOptions%"
for %%I in (*.mkv) do mkvmerge.exe -o "%%I" --default-track 0:yes "%%I"%SubtitleOptions%
endlocal
请阅读此答案,了解有关命令SETLOCAL和 ENDLOCAL 以及使用 Windows 批处理文件的具有多个命令的单行的详细信息,以了解在命令行上使用ENDLOCAL在批处理文件的初始环境中设置变量SubtitleOptions
的运算符&
,延迟扩展无法处理文件名中!
的.mkv
文件。
分配给环境变量的字符串SubtitleOptions
如果定义的话,总是以空格字符开头,这就是为什么%SubtitleOptions%
在命令行上执行mkvmerge.exe
"%%I"
之后。
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,然后完整而仔细地阅读每个命令的显示帮助页面。
echo /?
endlocal /?
for /?
set /?
setlocal /?