我不知道在没有正则表达式的情况下使-match 工作的方法,但是您可以使用许多选项。
选项 1:转义 -match 中的正则表达式字符
如果$cmd 不包含您打算用作正则表达式的任何特殊正则表达式字符,您可以简单地转义字符串。即使您仍在使用正则表达式,您仍在搜索文字字符串。
$cmd = [regex]::Escape('str*ng.txt')
$cmd
str\*ng\.txt
'string.txt' -match $cmd
False
'str*ng.txt' -match $cmd
True
'BEGIN str*ng.txtEND' -match $cmd
True
-match 的行为是它将在整个字符串中搜索您的匹配项,除非您使用锚字符。
选项 2:将 -eq 或 -like 与文字字符串一起使用
如果使用-eq,您必须期待完全匹配。您的搜索字符串必须在字面上与目标字符串匹配,并且不存在子字符串匹配。使用-like,您仍然可以进行子字符串匹配,但需要使用通配符。
# Testing with -eq
$cmd = 'str*ng.txt'
'string.txt' -eq $cmd
False
'str*ng.txt' -eq $cmd
True
'BEGINstr*ng.txt' -eq $cmd
False
# Testing with -like without escaping wildcards
$cmd = 'str*ng.txt'
'str*ng.txt' -like $cmd
True
'BEGINstr*ng.txt' -like $cmd
False
# Testing with -like while combining escaped wildcard chars and using wildcards
$cmd = [wildcardpattern]::Escape('str*ng.txt')
$cmd
str`*ng.txt
$cmd = "*{0}*" -f $cmd
$cmd
*str`*ng.txt*
'str*ng.txt' -like $cmd
True
'BEGINstr*ng.txt' -like $cmd
True
-eq 或 -like 的行为要求您了解整个字符串或了解使用哪些通配符来返回正确的结果。
选项 3:使用 Select-String
Select-String 支持-SimpleMatch 开关。这默认情况下会进行文字字符串的子字符串匹配。
$cmd = 'str*ng.txt'
if ('string.txt' | Select-String -Pattern $cmd -SimpleMatch) {
'Match Found'
} else {
'Match not Found'
}
Match not Found
if ('str*ng.txt' | Select-String -Pattern $cmd -SimpleMatch) {
'Match Found'
} else {
'Match not Found'
}
Match Found