Вот решение для одного конвейера , которое обрабатывает файлы как текстовые файлы и пропускает первые 15 данные строки , т. Е.сохраняет строку заголовка (первая строка в CSV-файле, содержащем имена столбцов), а сохраняет результат для каждого *.csv
файла в соответствующий *2.csv
файл :
Get-ChildItem c:\temp -Filter *.csv | ForEach-Object {
Get-Content $_.FullName |
Where-Object { $_.ReadCount -eq 1 -or $_.ReadCount -ge 17 } |
Set-Content ($_.FullName -replace '\.csv$', '2$&')
}
Примечание. Чтобы безоговорочно удалить первые 15 строк , замените команду Where-Object
на:
Select-Object -Skip 15
Обратите внимание на использование свойства .ReadCount
, которое содержит номер строки ввода.Get-Content
добавляет это свойство к каждой строке, которую оно читает из входного файла.
Обработка файлов CSV в виде текстовых файлов (с Get-Content
/ Set-Content
, а не Import-Csv
/ Export-Csv
) позволяет ускорить обработку (и сохранить наличие / отсутствие двойных кавычек вокруг значений), но есть предостережение о том, что текстовые строки такие же, как строки CSV : тогда как CSV строка равна обычно так же, как текстовый файл строка , которая не обязательно true: значения столбца CSV, если "..."
-замкнут, может охватывать несколько строк .
Также обратите внимание, чтов Windows PowerShell Set-Content
по умолчанию создает выходные файлы с кодировкой ANSI независимо от входной кодировки ;в PowerShell Core вы получите файлы без кодировки UTF-8 без спецификации. Используйте -Encoding
для управления выходной кодировкой.