如何在if语句中写入多个AND OR?

时间:2015-05-21 12:12:34

标签: powershell powershell-v3.0 logical-operators

我正在尝试为SharePoint 2013编写PowerShell脚本。我的想法是,我想选择引用/documents/文件夹的所有链接,并以.doc,{结尾{1}}或.docx,所以我写了以下.pdf声明:

if

我使用的是$links = $file.ForwardLinks; foreach ($link in $links) { if ($link.url -like '*/Documents/*' -and ($link.url -like '.doc' -or $link.url -like '.docx' -or $link.url -like '.pdf')) { & -and正确吗?

1 个答案:

答案 0 :(得分:1)

您的子句的组合是正确的:A -and (B -or C -or D)。但是,对于与-like运算符的部分匹配,您需要在字符串中使用通配符,否则运算符的行为与-eq运算符相同。

if (
  $link.url -like '*/Documents/*' -and
  ($link.url -like '*.doc' -or $link.url -like '*.docx' -or $link.url -like '*.pdf')
) {
  ...
}

但是,在您的情况下,更好的方法可能是从URL中提取扩展程序并检查它是否包含在扩展程序列表中:

$extensions = '.doc', '.docx', '.pdf'

$ext = [IO.Path]::GetExtension($link.url)
if ($link.url -like '*/Documents/*' -and $extensions -contains $ext) {
  ...
}