2012-10-05 21 views
6

同じヘッダーを持つ複数のCSVファイルがあり、バッチでそれらを結合して1つのヘッダーのみを保持しようとしています。何か案は?バッチ結合CSVヘッダーの削除

+0

ヘッダーを保持する特定のファイルがありますか(つまり、最初のcsvファイルのみ、または最後のファイルのみ)、またはすべてのファイルに同じヘッダーがありますか? –

答えて

7

MORE +1を使用すると、1行目以外のすべてを出力できます。

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

明らかに、必要に応じて各ファイルでスキップする行数を調整できます。 編集:入力

@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 

それとも、新しく作成された処理を回避するために、/ Fに使用する可能性があるので、新しく作成された出力CSVを使用しないように変更され、現在のフォルダ内のすべてのCSVファイルを結合するには

ファイル:

@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ファイルが同じ形式を共有する場合にのみ有効です。

EDIT 2015年7月30日:いくつかの制限があります。

  • タブ文字は、各CSVソースファイルが64Kよりも少ない持っている必要があり、スペース
  • の文字列に変換されます
      lines
  • +0

    最初の例が64k行に制限されているのはなぜですか? –

    3

    現在のフォルダ内のすべてのCSVファイルを結合するdbenhamの方法に問題がありました。時には結果の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" 
        ) 
    ) 
    ) 
    
    関連する問題