如何在powershell中实现循环以分割多个CSV文件?

如何在powershell中实现循环以分割多个CSV文件?,powershell,loops,csv,Powershell,Loops,Csv,我正在寻找一种方法,在这段代码中添加一个循环,这样它就可以一直转到一个目录并拆分文件。有40个文件需要分割成更小的块。对于每个循环,(拆分文件的)文件名需要是连续的,例如,如果一个循环创建了3个名为1.csv、2.csv、3.csv的拆分文件,则第二个循环需要继续使用4.csv,依此类推 非常感谢 $sourceCSV = "C:\Users\Mauritz\Desktop\splitter-test\largefiletest1.csv" ; $startrow = 0 ;

我正在寻找一种方法,在这段代码中添加一个循环,这样它就可以一直转到一个目录并拆分文件。有40个文件需要分割成更小的块。对于每个循环,(拆分文件的)文件名需要是连续的,例如,如果一个循环创建了3个名为1.csv、2.csv、3.csv的拆分文件,则第二个循环需要继续使用4.csv,依此类推

非常感谢

$sourceCSV = "C:\Users\Mauritz\Desktop\splitter-test\largefiletest1.csv" ;
$startrow = 0 ;
$counter = 1 ;

while ($startrow -lt 1000)
    {

    Import-CSV $sourceCSV | select-object -skip $startrow -first 50 | Export-CSV "C:\Users\Mauritz\Desktop\splitter-test\chunks\$($counter).csv" -NoClobber;

    $startrow += 50 ;
    $counter++ ;

}

我的解决方案是将行数(csv)按步骤划分,并在其后拼写

首先检查路径和文件是否存在

$sourceCSV = "C:\Users\Mauritz\Desktop\splitter-test\largefiletest1.csv" ;
$csv = Import-CSV $sourceCSV
$step = 50
$count = ($csv | Measure-Object).Count
0..($count/$step) | foreach {$csv | select-object -skip ($_*$step) -first $step | Export-CSV "C:\Users\Mauritz\Desktop\splitter-test\chunks\$_.csv" }
然后是第二个循环

更改文件名

$_.csv to $($_+$counter).csv 
并在循环设置前一个循环的最大值后添加

$counter = $counter + $($count/$step | measure).Count
这是一个带有循环的示例

$source = @('.\file1.csv','.\file2.csv')
$step = 6
$counter = 0 ;

$source | ForEach-Object {
    $sourceCSV = $_ ;
    $csv = Import-CSV $sourceCSV
    $count = ($csv | Measure-Object).Count
    $fileCounter = 0..($count/$step)
    $fileCounter | ForEach-Object {$csv | select-object -skip ($_*$step) -first $step | Export-CSV ".\$($_+$counter).csv" }
    $counter = ($fileCounter | Measure-Object).Count
}

或者使用ls Get ChildItem获取最大值文件

而不是定义一个csv文件,使用
Get ChildItem
迭代文件夹中的所有csv文件。首先确保输出路径“C:\Users\Mauritz\Desktop\splitter test\chunks”存在。如何使用该路径实现第二个循环?@MauritzBotha add#此示例使用loop@MauritzBotha如果我帮助了你,请(回答为“已接受”//或顶部)谢谢你的帮助,我只是无法确认答案是否正确,因为我运行它时它不起作用。你能把完整的代码放在一个盒子里吗?我不明白“完整的代码放在一个盒子里”这个例子对我来说是一个盒子
$source = @('.\file1.csv','.\file2.csv')
$step = 6
$counter = 0 ;

$source | ForEach-Object {
    $sourceCSV = $_ ;
    $csv = Import-CSV $sourceCSV
    $count = ($csv | Measure-Object).Count
    $fileCounter = 0..($count/$step)
    $fileCounter | ForEach-Object {$csv | select-object -skip ($_*$step) -first $step | Export-CSV ".\$($_+$counter).csv" }
    $counter = ($fileCounter | Measure-Object).Count
}