Проблема с оператором if else continue в цикле foreach - PullRequest
0 голосов
/ 06 января 2019

У меня есть следующее для цикла. Мой вопрос: если я использую оператор continue для первого оператора if, то второй оператор if (saveto) не работает. Из того, что я вижу, я предполагаю, что есть логическая ошибка. это будет рабочий процесс, как показано ниже:

-Все параметры имеют значение NULL, а параметр SaveTo не имеет значение NULL, фильтр вложений будет выполнен и, во-вторых, если будет выполнен оператор.

-Все параметры не равны NULL, а параметр SaveTo не равен NULL, фильтр вложений не будет выполняться, и, во-вторых, если оператор будет выполнен.

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  
    }

}

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы специально указываете свой код, чтобы пропустить часть $saveto, если $all не $null, используя оператор Continue.

Продолжить

Вернитесь к началу цикла программы, пропустите только эту итерацию цикла.

В цикле 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 - оператор переключения

0 голосов
/ 06 января 2019

Это то, для чего предназначен оператор continue: вернуться к началу цикла foreach и начать со следующего $ attachment. Смотрите также здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...