Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将多个.ttf文件批量附加到.mkv_Batch File_Batch Processing_Truetype_Mkv - Fatal编程技术网

Batch file 将多个.ttf文件批量附加到.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

好吧,我对这个完全陌生。。。基本上,我使用一个名为mkvmerge的工具将多个font file.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文件名,则此操作有效 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..."