2013-02-04 170 views
0

我可能在不同的时间有我需要合并的.csv文件。他们有相同的标题和列布局。我只需要一种简单的方法在Windows 7中将它们结合起来。用户可能并不总是安装有Excel。在Windows中合并CSV文件(最好是.cmd或.bat文件)

一个.cmd宏会很好,但我在网上找到的那个宏不起作用。

最好到目前为止,我已经得到了是这样的:

“打开命令窗口(” cmd.exe的“),然后键入以下两行(无支架)

cd "Desktop\[csv-files]" 
type *.csv > my-new-file.csv" 

Where the files to be combined are in Desktop\[csv-files]. 

但是 - 它似乎创建了重复项(或在某些情况下一式三份)的联合条目。例如,我有2个文件,我测试了23和26个唯一条目,我分出100个条目并至少有一个条目重复了3次。

现在我测试的.csv文件只有〜25 entr很长,但最终可能会达到数千甚至更多。

回答

2

听起来像使用*.csv时出现问题,并将输出重定向到同一文件夹中的.csv文件。 DOS似乎找到my-new-file.csv文件,因为*.csv输入它本身...您可以使用不同的输出文件扩展名,直到type命令完成后,然后您可以重命名输出文件...类似于:

cd "Desktop\[csv-files]" 
type *.csv > my-new-file.txt 
ren my-new-file.txt my-new-file.csv 

您也可以跳过每个文件的文件头后的第一个,让你不会在整个输出文件的中部,文件头告终。请尝试以下操作:

@echo off 

setlocal ENABLEDELAYEDEXPANSION 

set cnt=1 
cd "Desktop\[csv-files]" 

for %%i in (*.csv) do (
    if !cnt!==1 (
    for /f "delims=" %%j in ('type "%%i"') do echo %%j >> my-new-file.txt 
) else (
    for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> my-new-file.txt 
) 
    set /a cnt+=1 
) 

setlocal 

ren my-new-file.txt my-new-file.csv