2017-05-26 198 views
0

我有一個csv文件,其中包含以下內容。使用批處理文件將列添加到csv文件中

userid,userRole,ContentType 
1,text1,value1, 
2,text2,value2, 

我想寫一個批處理文件在csv文件的開頭添加少量列標題。我有這段代碼工作,只添加一個額外的列。是否可以根據列位置添加多個列?

例如我想在第二和第五位添加一個新列。

@echo off > newfile.csv & setLocal enableDELAYedeXpansion 
for /f "tokens=* delims= " %%a in (input.csv) do (
>> newfile.csv echo.FirstName,%%a 
) 

任何幫助將appriciated。

+1

你的樣本CSV是無效的 - 有在頭三列,但在排末尾的逗號標誌着一個空的第4列。用'for/f'處理一個csv文件,可能會出現空列',,'將會失敗,因爲for/f會忽略前導分隔符,並將連續的分隔符當作唯一的分隔符。 – LotPings

回答

1

儘管我在評論暗示只要沒有空列:

  • 您只需編寫新的頭第一行
  • 和新的空列在所有其他行英寸

@Echo off&Setlocal EnableExtensions EnableDelayedExpansion 
Set Row=0 
(for /f "tokens=1-5 delims=," %%A in (input.csv) do (
    Set /A Row+=1 
    If !Row! lss 2 (Rem new header 
     echo %%A,NewSecond,%%B,%%C,%%D,NewFifth,%%E 
    ) Else (Rem insert new empty columns 
     echo %%A,"",%%B,%%C,%%D,"",%%E 
    ) 
) 
) >newfile.csv 

輸出示例:

> type *.csv 
input.csv 

userid,userRole,ContentType,Col4,Col5 
1,text1,value1,"","" 
2,text2,value2,"","" 

newfile.csv 

userid,NewSecond,userRole,ContentType,Col4,NewFifth,Col5 
1,"",text1,value1,"","","" 
2,"",text2,value2,"","","" 
1
for /f "tokens=1-4,* delims=," %%a in (input.csv) do (
    >>newfile.csv echo %%a,NewSecond,%%b,%%c,%%d,NewFifth,%%e 
) 

%%e是「令牌*」,這意味着

你確定,你要對列2和5的相同字符串中每一行的「行的其餘部分」?

+0

不完全是,我想要的是,在第2和第5位添加標題並且標題值不應該相同。我檢查了它在列位置上下文中工作的解決方案,但是我想爲新添加的頭添加空值。 – Rockstar

+0

正如我們所說的空值 - input.csv中可能有這樣的嗎?那可能毀了newfile.csv – Stephan

+0

啊!那麼有什麼辦法可以只添加標題,但是標題列不應該包含任何值。 – Rockstar

相關問題