每次需要屏蔽.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!应该是正确的语言和字幕,正如我所理解的字母表。
发布于 2020-07-02 06:23:03
我没有安装mkvmerge.exe,也没有阅读mkvmerge文档,因此不知道所提供的选项是否真的正确。
下面的批处理文件根据当前目录中的--language文件创建了包含可变数量的.srt和--default-track选项的命令行。
@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之后出现的原因。
要了解所使用的命令及其工作方式,请打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。
echo /?endlocal /?for /?set /?setlocal /?https://stackoverflow.com/questions/62683851
复制相似问题