ваш код не создаст правильный файл CSV, так как вы не обрабатываете информацию заголовка и не используете Import-CSV
, чтобы позволить вам иметь дело с объектами, которые естественно экспортируются как CSV. поэтому я пошел с кодом, написанным для другого человека.
$SourceDir = $env:TEMP
$SourceFile = 'Source.csv'
$FullSourceFile = Join-Path -Path $SourceDir -ChildPath $SourceFile
$BatchSize = 4
$OutputDir = $env:TEMP
$OutputFile = 'Output.csv'
$FullOutputFile = Join-Path -Path $OutputDir -ChildPath $OutputFile
#$InCSV = Import-Csv -Path $FullSourceFile
#region - fake reading in CSV
# fake reading in a CSV file
# in real life, use Import-CSV above
$InCSV = @'
Col_1,Col_2,Col_3,Col_4
row-1-1, row-1-2, row-1-3, row-1-4
row-2-1, row-2-2, row-2-3, row-2-4
row-3-1, row-3-2, row-3-3, row-3-4
row-4-1, row-4-2, row-4-3, row-4-4
row-5-1, row-5-2, row-5-3, row-5-4
row-6-1, row-6-2, row-6-3, row-6-4
row-7-1, row-7-2, row-7-3, row-7-4
row-8-1, row-8-2, row-8-3, row-8-4
row-9-1, row-9-2, row-9-3, row-9-4
row-10-1, row-10-2, row-10-3, row-10-4
'@ | ConvertFrom-Csv
#endregion - fake reading in CSV
$Count = 0
$Remaining = $InCSV.Count
$Batch = [System.Collections.Generic.List[PSObject]]::new()
foreach ($IC_Item in $InCSV)
{
$Count ++
$Ready = $False
$Batch.Add($IC_Item)
if ($Count -eq $BatchSize)
{
$Ready = $True
$Count = 0
}
$Remaining --
if ($Remaining -eq 0)
{
$Ready = $True
}
if ($Ready)
{
$TimeStamp = Get-Date -Format 'yyyy-MM-dd__HH-mm-ss__fff'
$NewFullOutputFile = $FullOutputFile.Replace('.csv', "$TimeStamp.csv")
$Batch |
Export-Csv -LiteralPath $NewFullOutputFile -NoTypeInformation
$Batch.Clear()
}
}
экран не выводится. вот содержимое первого CSV ...
"Col_1","Col_2","Col_3","Col_4"
"row-1-1","row-1-2","row-1-3","row-1-4"
"row-2-1","row-2-2","row-2-3","row-2-4"
"row-3-1","row-3-2","row-3-3","row-3-4"
"row-4-1","row-4-2","row-4-3","row-4-4"
содержание последнего CSV ...
"Col_1","Col_2","Col_3","Col_4"
"row-9-1","row-9-2","row-9-3","row-9-4"
"row-10-1","row-10-2","row-10-3","row-10-4"