Batch file 将多个.ttf文件批量附加到.mkv
好吧,我对这个完全陌生。。。基本上,我使用一个名为mkvmerge的工具将多个font file.ttf附加到.mkv文件。我已将.mkv文件与我要附加的相应字体一起分离到文件夹中 我的目标是创建一个批处理,该批处理创建所有.mkv文件的副本以及所有添加的附件,并将它们存放在新创建的文件夹(即修订的父目录)中 从一个文件夹开始:Batch file 将多个.ttf文件批量附加到.mkv,batch-file,batch-processing,truetype,mkv,Batch File,Batch Processing,Truetype,Mkv,好吧,我对这个完全陌生。。。基本上,我使用一个名为mkvmerge的工具将多个font file.ttf附加到.mkv文件。我已将.mkv文件与我要附加的相应字体一起分离到文件夹中 我的目标是创建一个批处理,该批处理创建所有.mkv文件的副本以及所有添加的附件,并将它们存放在新创建的文件夹(即修订的父目录)中 从一个文件夹开始: mkdir Revised for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attach
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文件名,则此操作有效
i、 e
最后,我将得到一个新创建的修订文件夹,其中包含一个.mkv文件,该文件在.mkv文件中附加了sans serif.tff文件。
但是,我想添加多个.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特定命令以提供帮助:
更新:第一部分
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文件保留下来。请尝试一下。请记住将%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获取apply,并向其应用一个ttf文件,并使用附加的ttf创建新的mkv文件到修订后的目录,然后对于下一个ttf,您再次从根目录复制,用应用新ttf的新目录覆盖修订后目录中的mkv文件,等等
相反,我们需要首先将mkv文件复制到修订后的目录中,然后将第一个ttf文件应用到修订后的目录中,然后将带有已附加ttf的mkv和另一个ttf应用到修订后的原始mkv中,直到所有ttf文件都应用到修订后的原始mkv中的新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获取apply,并向其应用一个ttf文件,并使用附加的ttf创建新的mkv文件到修订后的目录,然后对于下一个ttf,您再次从根目录复制,用应用新ttf的新目录覆盖修订后目录中的mkv文件,等等
相反,我们需要首先将mkv文件复制到修订后的目录中,然后将第一个ttf文件应用到修订后的目录中,然后将带有已附加ttf的mkv和另一个ttf应用到修订后的原始mkv中,直到所有ttf文件都应用到修订后的原始mkv中的新mkv,并且所有ttf文件都将保留在父目录中文件夹
请注意,如果我解释的任何内容没有意义,请告诉我,我将重新措辞。我决定尝试一下,它是从保存目录的父目录运行的,我假设这些目录都在同一级别上,而不是通过嵌套目录递归 请注意,我无法对此进行测试 @回音 设置mkvm=%UserProfile%\Downloads\Video player、Editors和Downloaders\MKVTool批处理修改器\mkvmerge.exe 对于/F Delims^=^EOL^=%%A,在'Dir/B/AD 2^>num^中,FindStr/IVXC:修订' 如果存在,则执行%%A\*.mkv如果存在%%A\*.ttf 如果不存在修订\MD修订2>Nul | |退出/B 电话:S1%%A 后藤:EOF :S1 按%1 2>Nul | |退出/B 设置为=-附件mime类型应用程序/x-truetype-font-附件文件 设置TTF= 对于/F Delims^=^EOL^=%%A,在“Where.:*.ttf”中 Do Call Set ttfs=%%ttfs%%%as%%%%%~nxA 对于/F Delims^=^EOL^=%%A,在“Where.*.mkv”中 Do%mkvm%-q-o%~DP0修订\%%~nxA%%~nxA%ttfs% 流行音乐
我想我也这样做了,允许一个目录中有多个.mkv文件,每个文件都将附加到所有相同的.ttf文件。我决定尝试一下,它是从保存目录的父目录运行的,我假设这些目录都在同一级别上,这不是通过嵌套目录递归的 请注意,我无法对此进行测试 @回音 设置mkvm=%UserProfile%\Downloads\Video player、Editors和Downloaders\MKVTool批处理修改器\mkvmerge.exe 对于/F Delims^=^EOL^=%%A,在'Dir/B/AD 2^>num^中,FindStr/IVXC:修订' 如果存在,则执行%%A\*.mkv如果存在%%A\*.ttf 我 f不存在修订\MD修订2>Nul | |退出/B 电话:S1%%A 后藤:EOF :S1 按%1 2>Nul | |退出/B 设置为=-附件mime类型应用程序/x-truetype-font-附件文件 设置TTF= 对于/F Delims^=^EOL^=%%A,在“Where.:*.ttf”中 Do Call Set ttfs=%%ttfs%%%as%%%%%~nxA 对于/F Delims^=^EOL^=%%A,在“Where.*.mkv”中 Do%mkvm%-q-o%~DP0修订\%%~nxA%%~nxA%ttfs% 流行音乐 我想我也这样做了,允许一个目录中有多个.mkv文件,每个文件都将附加到所有相同的.ttf文件 创建一个与mkv同名但没有扩展名的文件夹。将mkv文件、文件夹和此代码放在同一文件夹中并运行它 这不是我写的代码。我请人做这个给我个人用 创建一个与mkv同名但没有扩展名的文件夹。将mkv文件、文件夹和此代码放在同一文件夹中并运行它
这不是我写的代码。我请人做这个给我个人用。什么是**%%~.ttf**?:此外,如果您展示一些输入示例以及预期的输出,也会更容易,这将使我们更容易提供帮助。@GerhardBarnard抱歉,我不是很清楚。任何给定文件夹中都有多个.ttf文件和一个.mkv文件。它们的命名之间没有关系。我编辑了这篇文章,希望能提供一些更清晰的信息。请告诉我是否需要更好的解释什么是**%%~.ttf**?:此外,如果您展示一些输入示例以及预期的输出,也会更容易,这将使我们更容易提供帮助。@GerhardBarnard抱歉,我不是很清楚。任何给定文件夹中都有多个.ttf文件和一个.mkv文件。它们的命名之间没有关系。我编辑了这篇文章,希望能提供一些更清晰的信息。请告诉我,如果一个更好的解释是需要像一个魅力编辑工作!!!非常感谢你。你介意解释一下你的思考过程和你是怎么做的吗?我不想让你听起来粗鲁,我不想这样做。我希望您自己一步一步地浏览该文件,阅读每个命令并在执行过程中学习它们。您可以打开命令提示符,输入每个命令,然后输入“帮助”选项,以了解每个命令的工作方式,例如PushD/?、Set/…等等,没有冒犯。我很感激你花了这么多时间来写它。非常感谢。它的效果非常好!!!非常感谢你。你介意解释一下你的思考过程和你是怎么做的吗?我不想让你听起来粗鲁,我不想这样做。我希望您自己一步一步地浏览该文件,阅读每个命令并在执行过程中学习它们。您可以打开命令提示符,输入每个命令,然后输入“帮助”选项,以了解每个命令的工作方式,例如PushD/?、Set/…等等,没有冒犯。我很感激你花了这么多时间来写它。非常感谢。
Get-ChildItem *.mkv | ForEach-Object {
$FontFlags = ""
Get-ChildItem -LiteralPath $_.BaseName -Exclude *.xml | ForEach-Object {
$FontFlags += " --add-attachment `"$($_.FullName)`""
}
Write-Host "Running &`"C:\Program Files\MKVToolNix\mkvpropedit.exe`" `"$_`" $FontFlags"
Invoke-Expression "&`"C:\Program Files\MKVToolNix\mkvpropedit.exe`" `"$_`" $FontFlags"
}
Read-Host "Press any key to exit..."