2013-05-02 82 views
1

我有一堆CSV文件,我想添加一個常量值之前合併它們,以便我知道每個行來自哪個CSV文件。我目前使用一個簡單的批處理文件來合併CSV文件,但我需要一個標識符來對合並文件進行排序。如何使用批處理文件向CSV添加常量值?

copy *.csv importfile.csv 

所以我需要的1的常數列在CSV-A添加到每一行,2對CSV-B,3對CSV-C等的恆定柱.....合併文件之前。

我相信這是可能的,但我不知道從哪裏開始?誰能幫忙?只有建立基本形式的目標文件的目錄,/b(文件名 -

另一種選擇是.....

If any row in column K in CSV-A.csv = "Certain Value" 
change to "1" 
ELSE do nothing 
+0

顯示一個例子。 – Endoro 2013-05-02 19:21:25

+0

我只需在我最喜歡的文本編輯器中打開每個CSV文件,然後在每行末尾搜索並替換CarriageReturn + LineFeeds,並使用相同的東西加上一個附加的「1」,等等(手動檢查第一行和最後一行)。這樣我就會在每一行的開始處結束新的''1',''。 – 2013-05-02 20:38:04

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=." 
SET "filemask=csv*.csv" 
(
FOR /f "tokens=1*delims=[]" %%c IN (
    'dir /b /a-d /on "%sourcedir%\%filemask%" ^|find /n /i ".csv"' 
    ) DO (
    SET "firstrow=Y" 
    FOR /f "usebackqdelims=" %%r IN ("%sourcedir%\%%d") DO (
    IF DEFINED firstrow IF %%c==1 ECHO Sourcefile,%%r 
    IF NOT DEFINED firstrow ECHO %%c,%%r 
    SET "firstrow=" 
    ) 
) 
)>importfile.csv 

設置目錄和文件匹配合適,然後
/a-d忽略目錄名稱/on按名稱的順序 - 找到".csv"(這將發生在每行中)/i在任何情況下/n並在[] 01中編號- 所述"tokens=1*delims=[]"選項分配數至%% c和文件名%% d

對於每個找到的文件,
- 標誌,我們正在處理第一行 - 從文件中讀取各行成%%ř - 如果它是文件#1中的第一行,將「sourcefile」添加到標題行 - 如果它不是第一行,則輸出文件#,前綴爲行文本 - 清除「第一行」標誌

請注意,輸出文件名不應與所選的文件掩碼相匹配。爲實例生成一個.txt文件並重命名它可以。

我假設你需要特別對待第一行。如果你不那麼簡單REM出了REM關鍵字(最簡單的選項)的SET "firstrow=Y"

當然,如果你ECHO %%d,%%r,而不是ECHO %%c,%%r然後將源文件名,而不是文件的序列號會出現(和可以做一些其他的簡化 - 但如果你這麼選擇,這是最簡單的選擇)