PowerShell 3.0 -iin 运算符是否支持通配符?如何以类似的方式使用-ilike?

PowerShell 3.0 -iin operator support of wildcards? How to use -ilike in a similar way?

我整理了一些 PowerShell 代码来搜索名称与任何文件名匹配的 PDF(在名为 $overlayTargetFilenames 的值数组中,包含 Name.pdf Name2.pdf Name3.pdf)但是完全匹配:

$matchedDrawings = Get-ChildItem $basePath -Directory -Force -Exclude 'Undesired 1','Undesired 2' | Get-ChildItem -Directory -Force | Get-ChildItem -Force -Recurse -Include '*.pdf' | where {$_.FullName -like '* A Target Subfolder\*' -and $_.FullName -notmatch "\OLD" -and $_.Name -iin $overlayTargetFilenames} | sort($_.basename) | ForEach-Object {$_.FullName}

我想做的是弄清楚如何对值数组具有通配符的 PDF 进行类似的搜索,例如如何制作 -iin(不区分大小写的 "IN" 运算符, -icontains 的反转参数顺序)的工作方式与 -ilike 对通配符的作用类似。

如果 $overlayTargetFilenames 具有类似 Name_* Name-2_* More-Name3_* 的值,我必须如何修改上面的代码才能工作——寻找以这些不同搜索开头的任何基本名称?搜索的名称是由代码较早生成的,列表大小变化很大。

我试过 -iin 和 -ilike。

不,-in运算符不支持通配符;它基本上枚举和检查类似于 -eq。如果你想要通配符,你需要自己迭代并使用 -like.

您可以对通过管道传输到 Foreach-Object 的值进行正则表达式匹配。对于可能具有特殊正则表达式字符的值,您可以使用 .NET Regex class 中的 Escape() 方法。结果将是一个包含正则表达式所需的所有转义字符的字符串。

$Collection | Foreach-Object {
    $regex = [Regex]::Escape($_)
}