将标头添加到多个CSV文件

时间:2015-06-02 16:15:12

标签: powershell csv

我正在寻找一种方法将标题行添加到多个CSV文件中。 下面这段代码的问题是它会在每个文件的末尾添加一个额外的空行。我不明白为什么有额外的空行,但我需要删除这些行。

$header="Column1,Column2,Column3,Column4,Column5,Column6"
Get-ChildItem .\ -Recurse -Filter *.csv| Foreach-Object {
  $header+"`r`n"+ (Get-Content $_.FullName | Out-String) |
    Set-Content -Path $_.FullName
}

1 个答案:

答案 0 :(得分:0)

规范方法是导入指定标题的文件,然后重新导出它们:

$header = 'Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6'

Get-ChildItem .\ -Recurse -Filter '*.csv' | ForEach-Object {
  $file = $_.FullName
  (Import-Csv -Path $file -Header $header) | Export-Csv -Path $file -NoType
}

Export-Csv会在CSV的所有字段周围添加双引号。此外,将数据解析为对象确实会对性能产生影响。如果您不希望添加双引号或者要求提高性能,那么@PetSerAl在您的问题的评论中建议的解决方案对您来说可能是更好的方法:

$header = 'Column1,Column2,Column3,Column4,Column5,Column6'

Get-ChildItem .\ -Recurse -Filter '*.csv' | ForEach-Object {
  $file = $_.FullName
  @($header; Get-Content -Path $file) | Set-Content -Path $file
}