将多个文本文件合并为一个

Posted

技术标签:

【中文标题】将多个文本文件合并为一个【英文标题】:Merge several text files into one 【发布时间】:2013-07-05 08:01:32 【问题描述】:

我有一个包含数千个文本文件的目录。每个文本文件都有一行。为了合并它们,我在 Windows 的命令提示符中使用了 copy * aggregate.txt,但是这些行已被复制,它们之间没有任何间距。

那么如何组合文件以使行分开?每次复制文件时插入一个换行符?

如果有办法在命令提示符下或使用 windows 批处理程序,或者我可以通过编写一个 c++ 程序来完成,如果你能告诉我如何一个一个地读取目录中的所有文件。

【问题讨论】:

【参考方案1】:

这可能需要一段时间才能开始,因为涉及数千个文件 更改 d:\folder 并将批处理文件放在不在 d:\folder 中的其他位置

@echo off    
pushd "d:\folder"
for /f "delims=" %%a in ('dir /b /a-d ') do (
type "%%a" >>aggregate.txt
echo.>>aggregate.txt
)
popd

或者这个应该马上开始:

@echo off
pushd "d:\folder"
dir /b /a-d >"c:\file.tmp"
for /f "delims=" %%a in (c:\file.tmp) do (
type "%%a" >>aggregate.txt
echo.>>aggregate.txt
)
del "c:\file.tmp"
popd

【讨论】:

第二个不起作用,而第一个起作用。现在没有。总行数比文件数多 3。 在运行之前删除 aggregate.txt 文件。第二个需要对 c:\ 的写权限 是的,在运行之前没有聚合。额外的 3 行呢? 大声笑,额外的 3 行来自批处理文件。 @Arjun U 很好。我修改了批处理来处理它。【参考方案2】:
@ECHO OFF
SETLOCAL
(
FOR %%i IN (*) DO if /i not "%%i"=="aggregate.txt" TYPE "%%i"&ECHO(
)>aggregate.txt

就我个人而言,我会用这个...

【讨论】:

这行得通,但总行数多于文件数。我不知道为什么。 您可以通过删除 setlocal 进一步简化它。 :) 但它也会解析aggregate.txt,不是吗? 是的 - 可能“额外行”的来源包括 aggregate.txt 在聚合中。我在运行测试之前将其删除。修改后的批次现在应该排除报告文件。

以上是关于将多个文本文件合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu如何使用终端将多个文本文件合并为一个

如何将多个csv按行合并?(不是首尾相接的按列合并)

使用 PowerShell 将多个 CSV 文件合并为一个

linux中怎么将文件合并

使用 ANT 逐行合并多个文本文件

如何在没有中间文件的情况下将多个文件合并为一个? [关闭]