将多个文本文件合并为一个
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
在聚合中。我在运行测试之前将其删除。修改后的批次现在应该排除报告文件。以上是关于将多个文本文件合并为一个的主要内容,如果未能解决你的问题,请参考以下文章