Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 拆分通过Powershell导出大型CSV文件_Excel_Windows_Powershell_Csv_Filesystems - Fatal编程技术网

Excel 拆分通过Powershell导出大型CSV文件

Excel 拆分通过Powershell导出大型CSV文件,excel,windows,powershell,csv,filesystems,Excel,Windows,Powershell,Csv,Filesystems,每个人都知道excel的最大行数为1048574。我的问题是:当达到最大行时,然后移动到一个新的CSV文件。我尝试了一些不走运的东西,我无法找到它 $RootFolder = Get-Content "c:\DRIVERS\myfile.txt" foreach ($arrayOfPaths in $RootFolder){ $csv = $arrayofPaths -replace '^\\\\[^\\]+\\([^\\]+)\\([^\\]+).*', 'C:\output\Com

每个人都知道excel的最大行数为1048574。我的问题是:当达到最大行时,然后移动到一个新的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)
}


  }

}
$RootFolder=获取内容“c:\DRIVERS\myfile.txt”
foreach($RootFolder中的ArrayOfPath){
$csv=$arrayofPaths-替换“^\\\[^\\]+\\([^\\]+)\\\([^\\]+).*”,“C:\output\Company\u name\u${1}\u${2}.csv”
$csvIndex=1
$maxRows=1000000
$rowsLeft=$maxRows
获取ChildItem$arrayOfPaths-Recurse | Where对象{$\模式-match“d”}ForEach对象{

#$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)
}

@pnuts我已编辑了我的问题由于业务需要,我必须通过Excel应用程序打开CSV文件,因为我想通过PowerShell拆分CSV文件首先非常感谢,我不知道如何准确修改您的代码。例如$thisCSV=选择对象……。我在这里需要做什么?因此我必须使用它吗在代码末尾导出Csv$Csv-Append-NoType命令之后?AFAIK$thisCSV=Get Acl$path | Select Object-Expand Access | Select Object@{n='path';e={$path},IdentityReference,AccessControlType,FileSystemRights | ConvertTo Csv我说得对吗?是的,你说得对。我忽略了那一行的开头,很抱歉弄混了。好的,但我遇到了一个问题,我看不到任何与NTFS权限相关的值,而不是我可以用“Length”看到的值列标题我假设有与syntaxWell相关的逻辑错误,当然我没有调试代码,它只是说明了这个概念。