2017-07-04 42 views
0

我有很多csv文件存儲在一個目錄中。 在每個csv文件中都需要通過powershell添加名稱作爲列。將文件名追加到新的CSV列中

文件位置:<SERVERNAME>\Export\FILENAME1.CSV

內容:

1232;Description;a1 
1232;Description;a2 

的結果必然是:

1232;Description;a1;FILENAME1.CSV 
1232;Description;a2;FILENAME1.CSV 

有人可以幫助我?

+1

我不太明白這個問題。目錄中有很多CSV文件。每個CSV文件名需要附加一個列名。這是哪個專欄名稱?是第一個列名?並且您想要在擴展名後附加列名? – Oasa

+0

在文件中需要將文件名作爲列添加到文件的每一行上。 如果是第一列或最後一列,沒關係。 – jafeth

+0

請參閱[如何詢問頁面](https://stackoverflow.com/help/how-to-ask)。到目前爲止您嘗試過什麼,以及您遇到什麼錯誤/問題? StackOverflow不是代碼寫入服務。理想情況下提供[mcve](https://stackoverflow.com/help/mcve) – gms0ulman

回答

1

下面將一個文件名列追加到每個.csv文件目錄:

Get-ChildItem *.csv | ForEach-Object { 
    $CSV = Import-CSV -Path $_.FullName -Delimiter ";" 
    $FileName = $_.Name 

    $CSV | Select-Object *,@{N='Filename';E={$FileName}} | Export-CSV $_.FullName -NTI -Delimiter ";" 
} 

說明:

  • 用途Get-ChildItem獲得名爲*的.csv
  • 所有文件迭代每個文件ForEach-Object並使用Import-CSV將其內容作爲PowerShell對象加載
  • 記錄文件的$FileName
  • 名稱使用Select-Object添加計算屬性的名稱Filename和的$FileName可變
  • 用途Export-CSV寫回了原來的文件中的值。 -NTI(NoTypeInformation)開關用於確保不包括PowerShell對象標題行。
+0

完美的答案。通過共享的預覽來判斷,您可能需要手動分隔CSV。 'import-csv $ _。FullName -delimiter「;」' – Oasa

+0

謝謝!好點,我會添加它。 –