2012-10-05 19 views
6

Mam wiele plików CSV z tym samym nagłówkiem i staram się połączyć je razem w Batch i zachować tylko jeden nagłówek. Jakieś pomysły?Batch Combine CSV Usuń nagłówek

+0

Czy istnieje konkretny plik, który chcesz zachować w nagłówku (np .: tylko pierwszy plik CSV lub tylko ostatni?) Czy wszystkie pliki mają identyczny nagłówek? –

Odpowiedz

7

Możesz użyć MORE +1, aby wyprowadzić wszystkie oprócz pierwszej linii.

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

Oczywiście można dostosować liczbę linii do pominięcia w każdym pliku w razie potrzeby.

Aby połączyć wszystkie pliki csv w bieżącym folderze: Edycja: zmodyfikowany, aby nie korzystać z nowo utworzonego csv wyjściowe jako wejście

@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 

Albo można użyć FOR/F, aby uniknąć przetwarzanie nowo utworzone file:

@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" 
) 
) 

Oczywiście jest to skuteczne tylko wtedy, gdy wszystkie pliki CSV mają ten sam format.

EDIT 30.07.2015:Istnieją pewne ograniczenia:

  • znaki Tab zostanie przekształcona w ciąg pomieszczeń
  • Każdy plik źródłowy CSV musi mieć mniej niż 64k linie
+0

Dlaczego pierwszy przykład jest ograniczony do 64 tys. Wierszy? –

3

Występowały problemy z metodą dbenham do łączenia wszystkich plików CSV w bieżącym folderze. Od czasu do czasu pobierał wynikowy plik CSV i dołączał go do zestawu. Zmodyfikowałem go, aby uniknąć tego problemu.

@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" 
    ) 
) 
)