按顺序将多个 .ts 文件批量连接到单个文件
Posted
技术标签:
【中文标题】按顺序将多个 .ts 文件批量连接到单个文件【英文标题】:Batch concatenate multiple .ts files to single file in order 【发布时间】:2021-12-26 13:13:33 【问题描述】:我正在尝试将多个 .ts 文件合并为一个。
如果文件编号小于 10 即 A1.ts、A2.ts、...、A9.ts,则以下脚本会按顺序合并文件:
copy /b *.ts joined_files.ts
但是,当文件编号大于 100 时,它们会按 A1.ts、A10.ts、...、A2.ts、A20.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
我对批处理脚本很陌生。请帮帮我!
【问题讨论】:
【参考方案1】:您可以做的一件事是提取数字。在您的情况下,这似乎很容易,因为您有一个基本名称、数字、扩展名的模式。
然后我们可以提取所有数字,将它们相互匹配以找到最大的数字,然后使用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
【讨论】:
这个解决方案是黄金。我不敢相信我为此伤透了脑筋。非常感谢!以上是关于按顺序将多个 .ts 文件批量连接到单个文件的主要内容,如果未能解决你的问题,请参考以下文章
python 格式化单个值以在符合RFC4180的CSV文件中使用。使用逗号将这个函数返回的多个值连接到crea
**.bat中,怎样将多文件,按文件名的关键字批量移动到多相应的文件夹中?