2016-11-12 5 views
-1

Я использую эту командуИспользование двух Где команды для запуска двух проверки

Where {$_.Extension -match "zip||rar"} 

, но нужно использовать эту команду слишком

Where {$_.FullName -notlike $IgnoreDirectories} 

Должен ли я использовать & & или II, как и в

Where {$_.Extension -match "zip||rar"} && Where {$_.FullName -notlike $IgnoreDirectories} 

или

Where {$_.Extension -match "zip||rar"} || Where {$_.FullName -notlike $IgnoreDirectories} 

?

То, что я пытаюсь выполнить, состоит в том, чтобы каждый файл zip и rar был извлечен, но я хочу пропустить извлечение файлов zip или rar в некоторых моих каталогах. Какое лучшее решение для этого?

ответ

1

В случае сомнений прочитайте documentation.

Windows PowerShell поддерживает следующие логические операторы.

  • -and логический и. ИСТИНА, только если оба оператора TRUE.
  • -or Логический или. ИСТИНА, когда оба или оба утверждения имеют значение ИСТИНА.
  • -xor логический эксклюзивный или. ИСТИНА, только если одно из утверждений TRUE, а другое - FALSE.
  • -not Логический нет. Отрицает утверждение, которое следует за ним.
  • ! Логический нет. Отрицает утверждение, которое следует за ним. (То же самое -not)

Положите оба положения в том же ScriptBlock и соединить их с соответствующим логическим оператором. Для логического И между двумя положениями используют -and:

Where-Object { 
    $_.Extension -match "zip||rar" -and 
    $_.FullName -notlike $IgnoreDirectories 
} 

Для логического ИЛИ между двумя статьями используют -or:

Where-Object { 
    $_.Extension -match "zip||rar" -or 
    $_.FullName -notlike $IgnoreDirectories 
} 

В вашем случае это, вероятно, бывшее.


Обратите внимание, что регулярное выражение соответствует zip||rar любому расширению из-за пустую строку между два |. Чтобы соответствовать только элементам с расширением .rar или .zip, удалите одну трубу: $_.Extension -match "zip|rar".

+0

Ваше предложение не работает, так как я не получаю сообщение об ошибке «Вы должны предоставить выражение выражения после Неожиданного токена« $ .FullName »в выражении или выражении». Как я могу решить эту ошибку? Я подумал, что для этого мне нужны два отдельных места. – Underdog

+0

Это, кажется, исправляет проблему с выражением, но будет ли это работать? Где {($ _. Extension -match "zip || prd") -and ($ .FullName -notlike $ ignore)} – Underdog

+0

Это должно было быть '$ _', а не просто' $ '.Не знаю, как исчезли символы подчеркивания. Исправлена. –