2016-11-12 51 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时才为TRUE。
  • -or逻辑或。当其中一个或两个语句均为TRUE时为TRUE。
  • -xor逻辑上的排他或。仅当其中一个语句为TRUE而另一个语句为FALSE时为TRUE。
  • -not逻辑不是。否定随后的陈述。
  • !逻辑不是。否定随后的陈述。 (同-not

把两个子句在同一个脚本块,并将它们与相应的逻辑运算符连接。对于逻辑之间的两个子句使用-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”) - 和($ .FullName -notlike $ ignore)} – Underdog

+0

这应该是'$ _',而不是'$'。不知道下划线如何失踪。固定。 –