使用两个Where命令运行两个检查

时间:2016-11-12 20:27:24

标签: where powershell-v4.0

我正在使用此命令

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

但也需要使用此命令

Where {$_.FullName -notlike $IgnoreDirectories}

我应该使用&&

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

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

我想要完成的是提取每个zip和rar文件,但我想跳过在某些目录中提取zip或rar文件。对此最好的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

如有疑问,请阅读documentation

  

Windows PowerShell支持以下逻辑运算符。

     
      
  • -and逻辑和。仅当两个语句都为TRUE时为TRUE。
  •   
  • -or逻辑或。当其中一个或两个语句都为TRUE时为TRUE。
  •   
  • -xor逻辑独占或。仅当其中一个语句为TRUE且另一个语句为FALSE时为TRUE。
  •   
  • -not逻辑不是。否定其后的陈述。
  •   
  • !逻辑不是。否定其后的陈述。 (与-not相同)
  •   

将两个子句放在同一个scriptblock中,并将它们与相应的逻辑运算符连接起来。对于两个子句之间的逻辑AND,请使用-and

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

对于两个子句之间的逻辑OR使用-or

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

在你的情况下,它可能是前者。

请注意,由于两个zip||rar之间的空字符串,您的正则表达式|会匹配任何扩展名。要仅匹配扩展名为.rar.zip的项目,请移除一个管道:$_.Extension -match "zip|rar"