2015-06-02 2 views
1

Я ищу способ добавить строку заголовка в несколько файлов 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

'Get-ChildItem \ -Recurse - Фильтр * .csv | Foreach-Object {@ ($ header; Get-Content $ _. FullName) | Set-Content -Path $ _. FullName} ' – PetSerAl

+0

Спасибо. Он работает. – johny777

ответ

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 
} 
+0

@ Ansgar.Спасибо. Решение PetSerAl работает лучше всего для меня. – johny777

Смежные вопросы