好吧,我是全新的...基本上我使用工具调用mkvmerge将多个字体文件(.ttf)附加到.mkv文件。我已将.mkv文件与我想要附加的相应字体一起分成文件夹。
我的目标是创建一个批处理,创建包含所有添加的附件的所有.mkv文件的副本,并将它们存放在父目录中新创建的文件夹(即修订版)中。
从一个文件夹开始:
mkdir Revised
for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "%%~.ttf"
如果我将“%%〜.ttf”更改为实际的.tff文件名(即
mkdir Revised
for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "sans serif.ttf"
我最终会得到新创建的Revised文件夹,其中包含一个.mkv文件,其中sans serif.tff文件附加在.mkv文件中。但是我想添加多个.ttf文件而不单独命名它们。 (在线搜索似乎我需要类似“$ file”的东西,虽然我不知道如何使用它)
接下来,如果我有一个包含多个子文件夹的父文件夹:
mkdir Revised
for /R %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "%%~.ttf"
这只是扁平的不起作用。不仅仅是因为“%%〜.ttf”问题,我敢肯定。
我知道这可能有点过于雄心勃勃,所以如果有人可以帮我解决问题的前半部分,那就太可爱了。非常感谢提前。
Ps:如果有人需要了解mkvmerge特定的命令来帮助:https://mkvtoolnix.download/doc/mkvmerge.html
更新:第一部分
mkdir Revised
for %%x in (*.ttf) do (
for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "%%x"
)
它似乎工作得更好但我认为脚本现在会添加和删除.ttf文件,直到文件夹中的最后一个.ttf文件仍然存在。
我决定对此进行尝试,它打算从保存目录的父目录运行(我假设这些目录都在同一级别,这不是通过嵌套目录递归)。
请注意,我无法对此进行测试。
@Echo Off
Set "mkvm=%UserProfile%\Downloads\Video Players, Editors, & Downloaders\MKVTool Batch Modifier\mkvmerge.exe"
For /F Delims^=^ EOL^= %%A In ('Dir/B/AD 2^>Nul^|FindStr/IVXC:"Revised"'
) Do If Exist "%%A\*.mkv" (If Exist "%%A\*.ttf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"))
GoTo :EOF
:S1
PushD %1 2>Nul||Exit /B
Set "as=--attachment-mime-type application/x-truetype-font --attach-file"
Set "ttfs="
For /F Delims^=^ EOL^= %%A In ('Where .:*.ttf'
) Do Call Set "ttfs=%%ttfs%% %as% "%%~nxA""
For /F Delims^=^ EOL^= %%A In ('Where .:*.mkv'
) Do "%mkvm%" -q -o "%~dp0Revised\%%~nxA" "%%~nxA" %ttfs%
PopD
我想我也是这样做的,允许在一个目录中允许多个.mkv
文件,其中每个文件都将附加到所有相同的.ttf
文件中。
请试一试。 (请记住将%mkvmerge%
变量设置为可执行路径):
@echo off
set "mkvmerge=C:\Some Path\mkvmerge.exe"
for %%a in (*.ttf) do (
for /f %%i in ('dir /s /b /a-d *.mkv ^| findstr /vi Revised') do (
if not exist "%%~dpiRevised" mkdir "%%~dpi\Revised"
if not exist "%%~dpiRevised\%%~nxi" copy "%%~fi" "%%~dpiRevised"
"%mkvmerge%" -q -o "%%~dpiRevised\%%~ni_rev%%~xi" "%%~dpiRevised\%%~nxi" --attachment-mime-type application/x-truetype-font --attach-file "%%~dpi%%a"
)
)
所以要解释你的例子出了什么问题:
在for循环中,你从根文件夹中的mkv
开始应用,并将ttf
文件应用到它并使用附加的mkv
创建新的ttf
文件到Revised
目录,然后为下一个ttf
再次从根目录复制,覆盖mkv
目录中的Revised
文件,其中添加了一个新的ttf
等。
相反,我们需要首先将mkv
文件复制到Revised
目录然后我们在ttf
中将第一个Revised
文件应用于自身,然后将mkv
与已经附加的ttf
一起使用并应用另一个ttf
直到所有ttf
文件适用于mkv
内部的新Revised
原始的mkv
和所有ttf
文件将保留在父文件夹中。
请注意,如果我解释的任何内容没有意义,请告诉我,我会重新说明。