You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中使用变量正确搜索含通配符的字符?

PowerShell中-like结合含通配符字符的变量时的匹配问题

我在PowerShell里做字符串比较时常用-like操作符,但遇到一个麻烦:当匹配模板里的变量包含通配符特殊字符(比如[)时,会触发语法错误,没法按字面内容匹配。

字符串直接匹配的示例

直接写模板字符串时,能正常匹配:

$Test = 'My string'
$Test -like "My*"

# 输出:True

但如果模板里有[这种通配符特殊字符,直接写就会报错,必须用反引号转义才能正常匹配:

$Test = '[My string]'
$Test -like "[My*"

# 报错:WildcardPatternException: The specified wildcard character pattern is not valid: [My*

$Test -like '`[My*'
# 输出:True

变量作为匹配模板的问题

如果把匹配的前缀存在变量里,正常情况没问题:

$Test = 'My string'
$Search = 'My'

$Test -like "$Search*"

# 输出:True

但变量里包含[时,直接拼接就会报错,因为[被当成了通配符模式的一部分:

$Test = '[My string]'
$Search = '[My'

$Test -like "$Search*"

# 报错:WildcardPatternException: The specified wildcard character pattern is not valid: [My*

我需要的是用$Search的字面内容来做前缀匹配,而不是让它被解析成通配符模式。

临时方案的局限

目前我能想到的临时办法是把[从变量里去掉,用包含匹配:

$Test = '[My string]'
$Search = 'My'

$Test -like "*$Search*"

# 输出:True

但这样会匹配所有包含My的字符串,没法精确匹配以[My开头的内容,不符合需求。

正确解决方法

要让变量里的特殊字符按字面匹配,需要用[WildcardPattern]::Escape()方法转义变量中的通配符特殊字符(包括[、]、*、?等),然后再拼接通配符:

$Test = '[My string]'
$Search = '[My'

# 转义变量中的特殊字符
$escapedSearch = [WildcardPattern]::Escape($Search)
# 拼接通配符后执行匹配
$Test -like "$escapedSearch*"

# 输出:True

这个方法会把$Search里的[转义成```[,这样-like就会把它当成普通字符处理,同时保留我们需要的*`通配符功能,实现精确的前缀匹配。


内容的提问来源于stack exchange,提问作者Dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:47:15