我有一个带字符串的数组:
$Names = @("Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10")
我想做以下事情:
我想要一个 Skip 变量,我可以在其中将数组切成块,并希望在中间间隔 5 秒打印我的名字。
我已经通过执行以下操作进行了尝试:
$BatchSkip = 5
for($i = 0; $i -lt $names.Count; $i += $BatchSkip){
$tempArray = $names |Select-Object -First $BatchSkip
foreach ($name in $tempArray)
{
write-host $name
} Start-Sleep -Seconds 5
}
但这会不断打印相同的名称。我的代码中缺少什么因素来实现它在我的数组上“循环”?
如果我正确理解你想要实现的目标,那么这应该有效:
$Names = @("Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10")
$BatchSkip = 5
for($i = 0; $i -lt $names.Count; $i += $BatchSkip){
$tempArray = $names[$i..($i+$BatchSkip-1)]
foreach ($name in $tempArray)
{
write-host $name
} Start-Sleep -Seconds 5
}
您的
tempArray
不包含正确的 names
值。
您永远不会在循环中增加
-Skip
的值。因此它总是返回相同的值。
另外:您需要使用
-Index
,而不是 -Skip
。-Skip
cmdlet...好吧,跳过前 N 项。但如果您有 3000 个项目,并且您 -Skip
5 个,那么它仍然会处理其他 2995 个。
使用
-Index
,否则您可以告诉Select-Object
您想要的值的确切范围
有一些脏代码
$Names = 'Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8', 'Name9', 'Name10'
$BatchSkip = 5
for ($Index = 0; $Index -lt $Names.Count; $Index += $BatchSkip) {
$Names | Select-Object -Index ($Index..($Index + $BatchSkip - 1))
Start-Sleep -Seconds 1
}