PowerShell数组批量处理问题:循环重复输出元素的排查
问题分析与解决
你的代码重复输出相同元素的核心问题是:每次调用Select-Object时只取了数组的前5个元素,完全没用到循环变量$i来跳过已经处理过的部分。
原代码里的$tempArray = $names | Select-Object -First $BatchSkip每次都从数组开头截取,自然每次都是Name1到Name5。要实现分块遍历,必须结合-Skip参数,用循环变量$i指定每次要跳过的元素数量。
修正后的代码如下:
$Names = @("Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10") $BatchSkip = 5 for($i = 0; $i -lt $names.Count; $i += $BatchSkip){ # 跳过前$i个元素,再取接下来的$BatchSkip个 $tempArray = $names | Select-Object -Skip $i -First $BatchSkip foreach ($name in $tempArray) { Write-Host $name } Start-Sleep -Seconds 5 }
这段代码的逻辑是:
- 第一次循环
$i=0:跳过0个元素,取前5个(Name1-Name5),输出后等待5秒 - 第二次循环
$i=5:跳过前5个元素,取接下来的5个(Name6-Name10),输出后等待5秒 - 当
$i=10时,$i -lt $names.Count(10 < 10)不成立,循环结束
这样就能实现数组的分块遍历,不会重复输出相同元素了。
内容的提问来源于stack exchange,提问作者Kahn Kah
相关产品推荐
相关产品推荐

