Param( $Path, $SplitLine=1000, $SkipLine=0, $LimitLine=0, $Encode="Default" ) $SkipFlag = $true $LineCounter = 0 $BreakCounter = 0 $FileNameIndex = 1 $SDate = Get-Date -DisplayHint DateTime if ($LimitLine -eq 0) { Write-Host ("{0} Pos:{1:0000000000}, Start, Skip {2} Lines, Split {3} Lines, All rows read." -f $SDate, 0, $SkipLine, $SplitLine) } else { Write-Host ("{0} Pos:{1:0000000000}, Start, Skip {2} Lines, Split {3} Lines, Limit {4} Line." -f $SDate, 0, $SkipLine, $SplitLine, $LimitLine) } foreach($line in Get-Content -Path $Path -Encoding $Encode -ErrorAction Stop) { $LineCounter++ if ($SkipFlag -eq $true) { if (($SkipLine -eq 0) -or ($LineCounter -gt $SkipLine)) { $SkipFlag = $false } else { continue } } if ($BreakCounter -eq 0) { $SplitPartFile = "{0}-{1:000}" -f $Path, $FileNameIndex $SDate = Get-Date -DisplayHint DateTime $BeginLine = $LineCounter Set-Content -Path $SplitPartFile -Value "" Clear-Content -Path $SplitPartFile Write-Host ("{0} Pos:{1:0000000000}, Creating {2}" -f $SDate, $BeginLine, $SplitPartFile) } $BreakCounter++ Add-Content -Path $SplitPartFile -Value $line if ($BreakCounter -eq $SplitLine) { $FileNameIndex++ $BreakCounter = 0 } if (($LimitLine -ne 0) -and ($LineCounter -eq $LimitLine)) { break } } $SDate = Get-Date -DisplayHint DateTime Write-Host ("{0} Pos:{1:0000000000}, Finished." -f $SDate, $LineCounter)