好吧,我是这方面的新手...基本上,我正在使用工具调用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文件,在.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特定的命令来提供帮助,请执行以下操作: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文件。
答案 0 :(得分:3)
请尝试一下。 (请记住,将echo array_search($needle,array_keys($haystack), true);
变量设置为可执行路径):
%mkvmerge%
因此,请解释您的示例出了什么问题:
在for循环中,您从根文件夹内的@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"
)
)
中获取Apply,并对其应用一个mkv
文件,并创建带有附件{{1 }}到ttf
目录,然后对于下一个mkv
,再次从根目录复制,用新的覆盖ttf
目录中的Revised
文件,其中一个应用了新的ttf
等。
相反,我们需要首先将mkv
文件复制到Revised
目录中,然后将第一个ttf
文件应用于mkv
中的自身,然后将已附加Revised
的{{1}}并对其应用另一个ttf
,直到所有Revised
文件都已应用于{{1}内的新mkv
}原始ttf
和所有ttf
文件将保留在父文件夹中。
注意,如果我所解释的内容没有任何意义,请告诉我,我会改写。
答案 1 :(得分:1)
我决定对此采取措施,目的是从保存您目录的父目录中运行,(我假设这些目录都在同一级别,因此不会通过嵌套递归目录)。
请注意,我无法对此进行测试。
@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
文件中
答案 2 :(得分:0)
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..."
制作一个与 mkv 同名的文件夹,没有扩展名。将mkv文件,文件夹,这段代码放在同一个文件夹中并运行它。
我没有制作这个代码。我请人制作这个供我个人使用。