1

我有大约 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%

在 Windows 中组合 mkv(自动,不使用 GUI)

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

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

我非常感谢您的帮助。谢谢

4

2 回答 2

2
  • 使用for-loop递归枚举/r子目录/d
  • 将工作目录更改为循环变量
  • 枚举.mpg文件并连接变量中的名称(使用延迟扩展
  • 使用该变量调用mkvmerge(注意它以空格开头,+所以我们应该从索引 2 开始提取它的内容,索引是从 0 开始的,这意味着第一个字符有 index0并且我们需要的第三个字符有 index 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
于 2015-10-09T17:58:40.047 回答
0

我试过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
    )
)

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

于 2015-10-09T22:57:06.700 回答