MoveNext не работает с частью-или - PullRequest
1 голос
/ 29 ноября 2011

У меня есть простой фрагмент кода:

foreach ($someFile in Get-ChildItem) {
    if (($someFile.Name.Substring(0,1) -eq "R") -or ($someFile.Name.Substring(0,1) -eq "S") {
        $foreach.MoveNext() | Out-Null
        $someFile.Name
    }
}

Идея этого простого примера состояла в том, чтобы вывести все имена файлов , за исключением для тех, которые начинаются с буквы "R""или" S ".

Когда я запускаю это в каталоге с одним файлом, который начинается с" R ", и тем, который начинается с" S "вместе с некоторыми другими файлами, он пропускает файл" S "какпредполагалось, но имя файла «R» по-прежнему отображается.

Я знаю, что есть другие способы, которыми я могу это сделать, но это была попытка убедиться, что я правильно использовал foreach передиспользуя его в более сложном фрагменте кода.

Может кто-нибудь увидеть что-то не так с кодом выше?Кажется, это должно работать для меня.Я также подтвердил, что $someFile.Name.Substring(0,1) -eq "R" возвращает True для файла "R", как и ожидалось.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

В настоящее время вы возвращаете $someFile.Name, поэтому файл S будет выдан, когда произойдет R, и на следующей итерации он перейдет к T (или к следующему), а не к S.Логика также ломается, когда есть несколько файлов R и т. Д.

Если вы просто хотите пропустить файлы R и S, возможно, вы просто захотите использовать continue:

foreach ($someFile in Get-ChildItem)
{
    if (($someFile.Name.Substring(0,1) -eq "R") -or ($someFile.Name.Substring(0,1) -eq "S"))
    {
        continue

    }
    $foreach.Current.Name  # $somefile.Name
}

Кроме того, вы можете использовать String.StartsWith вместо SubString.Или используйте -like и объедините его в одну проверку.

0 голосов
/ 29 ноября 2011
foreach ($someFile in Get-ChildItem) {
    if ($someFile.Name -notlike '[RS]*') {
        $someFile.Name
    }
}

или

Get-ChildItem -Exclude '[RS]*' | %{ $_.Name }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...