2012-10-05 71 views
6

我有多個CSV文件具有相同的標題,我試圖在批處理中將它們組合在一起,並只保留一個標題。有任何想法嗎?批量組合CSV刪除標題

+0

是否有一個特定的文件,你希望保留標題(即:只有第一個CSV文件,或只有最後?)或所有的文件都有一個相同的頭? –

回答

7

您可以使用MORE +1輸出除第一行以外的所有行。

>new.csv (
    type file1.csv 
    more +1 file2.csv 
    more +1 file3.csv 
    REM etc. 
) 

很明顯,你可以調整行的數量根據需要在每個文件跳過。

要合併所有CSV文件在當前文件夾: 編輯:修改爲不使用新創建輸出CSV輸入

@echo off 
setlocal 
set first=1 
>new.csv.tmp (
    for %%F in (*.csv) do (
    if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
) 
) 
move /y new.csv.tmp new.csv >nul 

或者你可以使用FOR/F,以避免處理新創建文件:

@echo off 
setlocal 
set first=1 
>new.csv (
    for /f "eol=: delims=" %%F in ('dir /b /a-d *.csv') do (
    if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
) 
) 

顯然這隻有在所有csv文件共享相同格式時纔有效。

編輯2015年7月30日:有一些限制:

  • Tab字符將被轉換成一個空格字符串
  • 每個CSV源文件必須少於64K行
+0

爲什麼第一個例子限於64k行? –

3

我在使用dbenham的方法來組合當前文件夾中的所有CSV文件時遇到了問題。它偶爾會提取CSV並將其包含在集合中。我已修改它以避免此問題。

@echo off 
setlocal 
set first=1 
set fileName="combinedFiles.csv" 
>%fileName% (
    for %%F in (*.csv) do (
    if not "%%F"==%fileName% (
     if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
    ) 
) 
)