使用 MKVToolNix 将字幕批量合并到 MKV 文件中

使用 MKVToolNix 将字幕批量合并到 MKV 文件中

我目前正在尝试将外部字幕文件(.ass 文件)合并到 mkv 文件中,但遇到循环问题。

我最近的尝试是:

set mkvmerge="C:\Program Files\MKVToolNix\mkvmerge.exe"  
set output_folder=G:\tada kun\muxed  
set counter = 01  
set test='G:\tada kun\subs\\[Kaya] Tada-Kun Wa Koi O Shinai - %counter% (Bd 1080P X.265 Flac).ass'  
for /r %%a in (*.mkv) do call %mkvmerge% -o "%output_folder%\%%~na.mkv"   --audio-tracks 1 --language 0:jpn --default-track 0:yes --language 1:jpn --default-track 1:yes  "%%a" --language 0:eng --default-track 0:yes "%test%" --attachment-name OpenSans-Semibold.ttf --attach-file ^"G:\tada kun\OpenSans-Semibold.ttf^"  --track-order 0:0,0:1,1:0

我不确定如何在这里增加计数器,但主要问题是当我调用测试变量时计数器不显示。任何帮助都将不胜感激。

答案1

counter当我调用测试变量时没有显示。

set counter = 01

这将创建一个名为counter(注意尾随空格)的变量。

正确的做法是:

set counter=01

为了满足值可能包含空格的情况:

set "counter=01"

但是,在您的情况下(使用计数器),您需要使用不同形式set

set /a counter=0

Where/a允许您对变量使用算术表达式。


我不确定counter这里如何增加。

使用:

set /a counter+=1

要检索该值有点棘手。首先,您必须使用以下方法启用延迟扩展:

setlocal enabledelayedexpansion

这允许在执行时而不是解析时评估变量。如果不这样做,循环中的变量将扩展为初始值而不是更新的值。

!counter!然后检索您用来代替的值%counter%

使用时,在!counter!每次执行该行时或for循环中的每个循环中都会执行扩展。


综合起来

@echo off
setlocal enabledelayedexpansion
set mkvmerge="C:\Program Files\MKVToolNix\mkvmerge.exe"  
set output_folder=G:\tada kun\muxed  
set /a counter=0
for /r %%a in (*.mkv) do (
  set "test=G:\tada kun\subs\\[Kaya] Tada-Kun Wa Koi O Shinai - !counter! (Bd 1080P X.265 Flac).ass"
  %mkvmerge% -o "%output_folder%\%%~na.mkv" --audio-tracks 1 --language 0:jpn --default-track 0:yes --language 1:jpn --default-track 1:yes "%%a" --language 0:eng --default-track 0:yes "!test!" --attachment-name OpenSans-Semibold.ttf --attach-file ^"G:\tada kun\OpenSans-Semibold.ttf^"  --track-order 0:0,0:1,1:0
  set /a counter+=1
  )
endlocal

笔记:

  • set test...已被移至for循环内部并"使用 s 代替's。
  • "%test%"已被替换为"!test!"使用延迟(执行)时间扩展

进一步阅读

相关内容