2016-08-29 2 views
-1

Как все знают, что у excel есть max rows 1048574. Мой вопрос: когда максимальная строка достигнута, а затем перейдите в новый файл CSV, я пробовал что-то не повезло, я не могу это понять вне.Разделение Экспорт больших файлов CSV через Powershell

$RootFolder = Get-Content "c:\DRIVERS\myfile.txt" 

foreach ($arrayOfPaths in $RootFolder){ 

    $csv = $arrayofPaths -replace '^\\\\[^\\]+\\([^\\]+)\\([^\\]+).*', 'C:\output\Company_name_${1}_${2}.csv' 
    Get-ChildItem $arrayOfPaths -Recurse | Where-Object {$_.mode -match "d"} | ForEach-Object { 
$path = $_.FullName 
    Get-Acl $path | Select-Object -Expand Access | 
    Select-Object @{n='Path';e={$path}}, IdentityReference, AccessControlType, 
        FileSystemRights | 
    Export-Csv $csv -Append -NoType 
    } 

} 

Последнее обновление:

$RootFolder = Get-Content "c:\DRIVERS\myfile.txt" 

foreach ($arrayOfPaths in $RootFolder){ 

    $csv = $arrayofPaths -replace '^\\\\[^\\]+\\([^\\]+)\\([^\\]+).*', 'C:\output\Company_name_${1}_${2}.csv' 
    $csvIndex = 1 
    $maxRows = 1000000 
    $rowsLeft = $maxRows 

    Get-ChildItem $arrayOfPaths -Recurse | Where-Object {$_.mode -match "d"} | ForEach-Object { 
    #$csv = $_.FullName -replace '^\\\\[^\\]+\\([^\\]+)\\([^\\]+).*', 'C:\output\Company_name_${1}_${2}.csv'# <- construct CSV path here 
    $path = $_.FullName 
    $thisCSV = Get-Acl $path | Select-Object -Expand Access | 
    Select-Object @{n='Path';e={$path}}, IdentityReference, AccessControlType, 
        FileSystemRights | 
    ConvertTo-Csv 
if ($thisCSV.count -lt $rowsLeft) { 
    $thisCSV | Export-Csv $csv -append -noType 
    $rowsLeft -= $thisCSV.count 
} else { 
    $thisCSV[0..($rowsLeft - 1)] | Export-Csv $csv -append -noType 
    $csvIndex++ 
    $csv = $csv -replace '\.csv$', "$csvIndex.csv" 
    if ($thisCSV.count -gt $rowsLeft) { 
     $thisCSV[$rowsLeft..($thisCSV.count - 1)] | Export-Csv $csv -append -noType 
    } 
    $rowsLeft = $maxRows - ($thisCSV.count - $rowsLeft) 
} 


    } 

} 
+0

@pnuts Я отредактировал мой вопрос – Arbelac

+0

я должен открыть АСВН файлы с помощью применения Excel в связи с бизнес-требованиями Из-за того, что я хочу разделить CSV-файл с помощью PowerShell – Arbelac

ответ

0

ли ConvertTo-Csv во временном переменном, сложите его свойство .Count до точки разделения не будет достигнута, то разделить массив CSV в новый файл с новым именем, будет использоваться с этого момента.

Ниже приведен упрощенный пример, который предполагает, что ни один CSV не может превышать 1000000 строк.

$csv = ............. 
$csvIndex = 1 
$maxRows = 1000000 
$rowsLeft = $maxRows 

........... 
$thisCSV = Select-Object ........ | 
      ConvertTo-Csv 
if ($thisCSV.count -lt $rowsLeft) { 
    $thisCSV | Export-Csv $csv -append -noType 
    $rowsLeft -= $thisCSV.count 
} else { 
    $thisCSV[0..($rowsLeft - 1)] | Export-Csv $csv -append -noType 
    $csvIndex++ 
    $csv = $csv -replace '\.csv$', "$csvIndex.csv" 
    if ($thisCSV.count -gt $rowsLeft) { 
     $thisCSV[$rowsLeft..($thisCSV.count - 1)] | Export-Csv $csv -append -noType 
    } 
    $rowsLeft = $maxRows - ($thisCSV.count - $rowsLeft) 
} 
+0

Прежде всего большое спасибо, я не понимаю, что как я могу точно адаптировать ваш код. например $ thisCSV = Select-Object ........ что мне нужно делать здесь? Так что я должен использовать его после команды Export-Csv $ csv -Append -NoType в конце кода? – Arbelac

+0

AFAIK $ thisCSV = Get-Acl $ path | Select-Object -Expand Access | Select-Object @ {n = 'Path'; e = {$ path}}, IdentityReference, AccessControlType, FileSystemRights | ConvertTo-Csv Я правильно? – Arbelac

+0

Да, ты прав. Я забыл начало этой линии, извините за путаницу. – wOxxOm

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