我有以下循环。我的问题是,如果我对第一个 if 语句使用继续语句,那么第二个 if 语句(saveto)不起作用。从我所看到的,我假设存在逻辑错误。它的工作流程如下:
-所有参数为空,SaveTo参数不为空,附件过滤器将执行,第二个if语句将执行。
-all 参数不为空且 SaveTo 参数不为空,附件过滤器不会执行,第二个 if 语句将执行。
foreach ($attachment in $attachments.value) {
# weed out unwanted attachments
# Use the All siwtch to include them
If (!$All) {
If ($attachment.Size -lt 100000 -and $attachment.contentType -like '*image*') {
#images from less then 100kb
continue
} ElseIf ($attachment.contentType -eq 'application/octet-stream' ) {
#bin files
continue
}
}
If ($SaveTo) {
$timestamp = $attachment.DateTimeLastModified.Replace(':','')
$path = "$SaveTo$timestamp`_$($attachment.name)"
#$path = "C:path" + $attachment.Name
$Content = [System.Convert]::FromBase64String($attachment.ContentBytes)
Set-Content -Path $path -Value $Content -Encoding Byte
}
}
您专门指示代码在未使用 Continue
语句$null
$all
时跳过$saveto
部分。
继续
返回到程序循环的顶部,跳过循环的此迭代。
在 For、ForEach 或 While 循环中,您可以将 continue 语句添加到 跳到最里面循环的顶部。
例
数到 10 但错过了数字 5:
$i =0 while ($i -lt 10) { $i +=1 if ($i -eq 5) {continue} Write-Host $i }
来源:SS64 - 继续声明
Continue
可用于不退出循环的唯一方案是在 Switch
语句中。在此特定场景中,Continue
语句将指示您要跳过剩余的条件块并评估当前Switch
中的下一个条件。
参考
SS64 - 开关声明
这就是 continue 语句的用途:跳回到 foreach 循环的开头,从下一个$attachment开始。西尔也在这里