按顺序将多个 .ts 文件批量连接到单个文件

Batch concatenate multiple .ts files to single file in order

我正在尝试将多个 .ts 文件合并为一个文件。

如果文件编号小于 10,则以下脚本按顺序合并文件,即 A1.ts、A2.ts、....、A9.ts:

copy /b *.ts joined_files.ts

但是,当文件编号大于 100 时,它们会按 A1.ts、A10.ts、...、A2.ts、A20.ts 和 A1.ts 的顺序合并很快。 (数字不符合预期)

为了解决这个问题,我尝试使用一个 for 循环和一个变量名来遍历数字,如下所示:

:MainProcessNew

set "BaseName=A"
set "FileNumber=1"

:FileNameLoop
set /A FileNumber+=1
copy /b "%BaseName%%G%.ts" joined_files.ts
if exist "%BaseName%%FileNumber%.ts" goto FileNameLoop

我发现这个 link 是相关的,但我无法理解:Link

我对批处理脚本还很陌生。请帮帮我!

您可以做的一件事是提取数字。在您的情况下,这似乎很容易,因为您有一个基本名称、数字、扩展名的模式。

所以我们可以提取所有数字,将它们相互匹配以找到最大的数字,然后使用 for /l:

对它们进行排序
@echo off
set max=
set "bn=A"
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b "*.ts"') do (
    set "nm=%%~ni"
    set "nm=!nm:%bn%=!
    if not defined max set max=!nm!
    if !nm! gtr !max! set max=!nm!
)
for /l %%n in (1,1,%max%) do if exist %bn%%%n.ts echo %bn%%%n.ts

这将简单地将每个名称打印到屏幕上,以向您展示它能够对其进行排序。在您的情况下,您可以将最后一行更改为:

(for /l %%n in (1,1,%max%) do if exist %bn%%%n.ts type %bn%%%n.ts)>joined_files.ts