about_Wildcards
简短说明
介绍如何在 PowerShell 中使用通配符。
长说明
通配符代表一个或多个字符。 可以在命令中使用通配符创建字词模式。 通配符表达式与 -like
运算符或任何接受通配符的参数搭配使用。
例如,若要匹配 C:\Techdocs
目录中文件扩展名为“.ppt
”的所有文件,则键入:
Get-ChildItem C:\Techdocs\*.ppt
这种情况下,星号 (*
) 通配符代表出现在 .ppt
文件扩展名前面的任何字符。
通配符表达式比正则表达式更简单。 有关详细信息,请参阅 about_Regular_Expressions。
PowerShell 支持以下通配符:
-
*
- 与零个或多个字符匹配-
a*
匹配aA
、ag
和Apple
-
a*
不匹配banana
-
-
?
- 对于字符串,匹配该位置中的一个字符-
?n
匹配an
、in
和on
-
?n
不匹配ran
-
-
?
- 对于文件和目录,匹配该位置中的零个字符或一个字符-
?.txt
匹配a.txt
和b.txt
-
?.txt
不匹配ab.txt
-
-
[ ]
- 匹配字符的范围-
[a-l]ook
匹配book
、cook
和look
-
[a-l]ook
不匹配took
-
-
[ ]
- 匹配特定字符-
[bc]ook
匹配book
和cook
-
[bc]ook
不匹配hook
-
-
`*
- 匹配任何字符作为文本(而不是通配符)-
12`*4
与12*4
-
12`*4
不匹配1234
-
可以在同一个字词模式中包含多个通配符。 例如,若要查找名称以字母 a 一直到 l 开头的文本文件,则键入:
Get-ChildItem C:\Techdocs\[a-l]*.txt
注意
文件系统项的通配符匹配的工作方式与字符串不同。 有关详细信息,请参阅 DirectoryInfo.GetFiles(String, EnumerationOptions) 方法的“备注”部分。
某些情况下可能希望匹配文本字符,而不将其视为通配符。 这种情况下,可以使用反引号 (`
) 字符转义通配符,以便使用文本字符值对其进行比较。 例如,'*hello`?*'
匹配包含“hello?”的字符串。
许多 cmdlet 接受参数值中的通配符。 每个 cmdlet 的“帮助”主题会介绍哪些参数接受通配符。 接受通配符的参数在使用时不区分大小写。
可以在命令和脚本块中使用通配符,例如创建表示属性值的字词模式。 例如,以下命令获取其中的 ServiceType 属性值包含 Interactive 的服务。
Get-Service | Where-Object {$_.ServiceType -like "*Interactive*"}
在以下示例中,If
语句包含一个使用通配符查找属性值的条件。 如果还原点的“说明”包含 PowerShell,则该命令将还原点的“CreationTime”属性添加到日志文件中。
$p = Get-ComputerRestorePoint
foreach ($point in $p) {
if ($point.description -like "*PowerShell*") {
Add-Content -Path C:\TechDocs\RestoreLog.txt "$($point.CreationTime)"
}
}