使用批处理文件将多个.csv文件串行合并到一个.csv文件中

时间:2012-12-21 06:18:01

标签: if-statement for-loop batch-file

我遇到需要将四个CSV文件合并为一个CSV文件的情况。如果我只是想一个接一个地添加它们,这很容易,但我需要让它们在CSV文件中并排。我知道所有四个文件都有相同数量的条目(在1000条目范围内)。我一直在研究以下代码,它适用于小文件,但对于长文件效率极低。有没有更简单的方法来完成同样的任务?

@echo off
setlocal enabledelayedexpansion
Set R=1
Set T=1
Set Y=1
Set U=1
for /f %%a in (test1.txt) do (
    set I=!R!
    for /f %%b in (test2.txt) do (
        set J=!T!
        for /f %%c in (test3.txt) do (
            set K=!Y!
            for /f %%d in (test4.txt) do (
                set L=!U!
                If !I!==!J! If !J!==!K! If !K!==!L! echo %%a,%%b,%%c,%%d >> TestComplete.txt
                Set /a U=U+1
            ) 
            Set U=1
            Set /a Y=Y+1
        )
        Set Y=1
        Set /a T=T+1
    )
    Set T=1
    Set /a R=R+1
)

注意:我知道我粘贴的代码是使用.txt文件而不是.csv文件。我认为对一个人有用的东西会为另一个人工作。

同样,只要文件很小,上面的代码似乎工作得很好。当文件(在本例中为test1.txt)有大约1000行文本时,我遇到了麻烦(当然)。

1 个答案:

答案 0 :(得分:2)

GnuWin,Windows的GNU(类似Unix)工具的端口集合,包含paste,它完全符合您的要求。但是,我觉得你更喜欢原生的Windows答案而且我想出了一个,但它并不漂亮。从@walid2mi's clever solution开始并将其条带化为coljoin.bat:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%1) do (
    set /p line=
    echo !line!, %%a
)

您可以通过以下方式加入四个文件:

type a.txt | coljoin b.txt | coljoin c.txt | coljoin d.txt > TestComplete.txt

所需时间应随文件长度线性增加,避免解决方案急剧减速。但是,当所有文件没有相同数量的行时,此解决方案的故障模式并不好。通常会提示用户输入缺失的行。