如何在powershell中实现循环以分割多个CSV文件?
我正在寻找一种方法,在这段代码中添加一个循环,这样它就可以一直转到一个目录并拆分文件。有40个文件需要分割成更小的块。对于每个循环,(拆分文件的)文件名需要是连续的,例如,如果一个循环创建了3个名为1.csv、2.csv、3.csv的拆分文件,则第二个循环需要继续使用4.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 ;
$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
}