Excel 拆分通过Powershell导出大型CSV文件
每个人都知道excel的最大行数为1048574。我的问题是:当达到最大行时,然后移动到一个新的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
$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相关的逻辑错误,当然我没有调试代码,它只是说明了这个概念。