2012-10-05 13 views
6

मेरे पास एक ही शीर्षलेख के साथ कई सीएसवी फाइलें हैं और मैं उन्हें बैच में एक साथ जोड़कर और केवल एक ही शीर्षलेख रखने की कोशिश कर रहा हूं। कोई विचार?बैच संयोजन सीएसवी हेडर हटाएं

+0

क्या कोई विशेष फ़ाइल है जिसे आप शीर्षलेख रखना चाहते हैं (यानी: केवल पहली सीएसवी फ़ाइल, या केवल अंतिम?) या क्या सभी फाइलों में एक समान शीर्षलेख है? –

उत्तर

7

आपका उपयोग कर सकते हैं ताकि सभी लाइनों को आउटपुट किया जा सके।

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

स्पष्ट रूप से आप आवश्यकतानुसार प्रत्येक फ़ाइल में जाने के लिए लाइनों की संख्या समायोजित कर सकते हैं।

वर्तमान फ़ोल्डर में सभी 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 

के रूप में नव निर्मित उत्पादन सीएसवी का उपयोग नहीं करने के लिए संशोधित या/एफ नव निर्मित संसाधन से बचने के लिए आप इस्तेमाल कर सकते हैं फ़ाइल:

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

स्पष्ट रूप से यह केवल प्रभावी है यदि सभी सीएसवी फाइलें समान प्रारूप साझा करती हैं।

संपादित करें 2015/07/30:वहाँ कुछ सीमाएँ हैं:

  • टैब वर्ण रिक्त स्थान की एक स्ट्रिंग
  • प्रत्येक सीएसवी स्रोत फ़ाइल होना आवश्यक है में बदल दिया जाएगा की तुलना में कम 64k लाइन
+0

पहला उदाहरण 64k लाइनों तक सीमित क्यों है? –

3

मुझे वर्तमान फ़ोल्डर में सभी CSV फ़ाइलों को संयोजित करने के लिए dbenham की विधि के साथ समस्याएं थीं। यह कभी-कभी परिणामी सीएसवी उठाएगा और इसे सेट में शामिल करेगा। मैंने इस समस्या से बचने के लिए इसे संशोधित किया है।

@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" 
    ) 
) 
) 
संबंधित मुद्दे