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($_)
}
我整理了一些 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($_)
}