【问题标题】:Batch combine video files in a folder and subfolders批量合并文件夹和子文件夹中的视频文件
【发布时间】:2015-10-09 16:58:20
【问题描述】:

我有大约 200 个文件夹,里面装满了 MPG 拆分文件。我想将每个文件夹的文件连接在一起。我在 stackoverflow 上的其他问题中找到了这个 BATCH 脚本。

@echo off &setlocal enabledelayedexpansion
cd /d "%sourcefolder%"
set "line="
for %%a in (*.mpg) do set line=!line! +"%%~a"
"C:\Program Files\MKVToolNix\mkvmerge.exe" -o "Output.mkv" %line:~2%

Combine mkv's in Windows (automated, not using a GUI)

效果很好,但问题是,我必须将 .bat 文件粘贴到大约 200 个文件夹中,然后运行大约 200 次。

谁能帮帮我。如何从根文件夹运行此文件以合并/加入子文件夹中的所有文件,并在每个子文件夹或新文件夹(如“/OutputVideos”)中创建新的“output.mkv”文件,名称中可能有一个数字增量或与子文件夹同名。

非常感谢您的帮助。谢谢

【问题讨论】:

  • 我已经在几个文件夹中尝试了这个批处理脚本,它按预期创建了输出文件。现在正在寻找从根文件夹运行的更简单、更好的解决方案。如果有的话。
  • 也许你正在寻找for /R -- 输入for /?...
  • @aschipfl 感谢您的提示。我试过了,它结合了所有子文件夹的文件,并在根目录中创建了一个大的“output.mkv”文件。我正在寻找的是为子文件夹创建一个单独的输出文件。任何建议。这里的新手。顺便说一句,像这样for /R %%a in (*.mpg) do set line=!line! +"%%~a"
  • @wOxxOm 没问题。我将等待答案。谢谢

标签: windows batch-file command-line mkv


【解决方案1】:
  • 使用for-loop通过子目录/d递归枚举/r
  • 将工作目录更改为循环变量
  • 枚举.mpg 文件并连接变量中的名称(使用delayed expansion
  • 使用该变量调用mkvmerge(注意它以空格和+开头,所以我们应该从索引2开始提取它的内容,索引是从0开始的,这意味着第一个字符有索引0我们需要的第三个字符有索引2)

将代码放在基础文件夹的concatenate.bat文件中,批处理文件将处理所有子文件夹。

@echo off
setlocal enableDelayedExpansion

set mkvmerge="C:\Program Files\MKVToolNix\mkvmerge.exe"

for /d /r %%D in (*) do (
    pushd %%D
    set files=
    for %%F in (*.mpg) do set files=!files! + ^( "%%F" ^)
    if not "!files!"=="" %mkvmerge% -o "output.mkv" !files:~2!
    popd
)
pause

【讨论】:

  • 非常感谢。像魅力一样工作。
【解决方案2】:

我试过wOxxOm,但我发现它更快:

@echo off
setlocal enableDelayedExpansion

for /f "delims=" %%d in ('dir /b /s /ad') do (
    set files=
    if exist %%d\*.mpg (
      pushd %%d
      for /f "delims=" %%f in ('dir /b /a-d "%%d\*.mpg"') do (
        set files=!files! "%%f"
      )
    echo !files!
    popd
    )
)

理想情况下,只扫描一次子文件夹并只保留不重复的路径。

【讨论】:

  • 到底什么地方更快? 99.9999999999999999% 的时间花在mkvmerge 上。还有为什么dir解析?此任务不需要它。你在说什么重复的路径?
  • @wOxxOm 1) 我同意你的观点,mkmerge 占 99.9%。但是在合并文本和数千个文件夹等任务上,速度会受到影响。 3)假设我使用单个循环来搜索文件“.mpg”并提取文件夹路径,我的意思是我不知道如何避免重复出现。
猜你喜欢
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2013-01-08
  • 2022-10-17
  • 2020-06-30
相关资源
最近更新 更多