如果其他继续语句在 foreach 循环中出现问题



我有以下循环。我的问题是,如果我对第一个 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开始。西尔也在这里

最新更新