2016-08-29 10 views
-1

誰もがExcelの最大行を持っていることを知っている1048574。私の質問は:最大行に達したときに、新しいCSVファイルに移動します。でる。分割Powershell経由で大規模なCSVファイルをエクスポート

$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

PowerShellを – Arbelac

+0

を編集した@pnutsまず第一には、どうもありがとうございました、私はそれを理解しませんあなたのコードをどのように適合させることができますか?例えば$ thisCSV = Select-Object ........ここで何が必要ですか?だから、私はそれを使用しなければならないexports-csv $ csv -Append -NoTypeコマンドは、コードの最後に? – Arbelac

答えて

0

がスプリット・ポイントに到達するまで、その.Countプロパティを追加し、一時変数にConvertTo-Csvを行い、その新しい名前で新しいファイルに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

を経由して、私はCSVファイルを分割したい私はそのために起因するビジネス要件にExcelのアプリケーションを介してのCSVファイルを開く必要が私の質問 – Arbelac

+0

AFAIK $ thisCSV = Get-Acl $パス|オブジェクトを選択 - アクセスを拡張| Select-Object @ {n = 'Path'; e = {$ path}}、IdentityReference、AccessControlType、 FileSystemRights | ConvertTo-Csv私は正しいですか? – Arbelac

+0

はい、あなたは正しいです。私は混乱のために申し訳ありません、その行の始まりを見落としました。 – wOxxOm

関連する問題