about_Wildcards

简短说明

介绍如何在 PowerShell 中使用通配符。

长说明

通配符表示一个或多个字符。 可以使用它们在命令中创建单词模式。 通配符表达式与 运算符一起使用, -like 或与接受通配符的任何参数一起使用。

例如,若要将目录中的所有文件 C:\Techdocs.ppt 文件扩展名匹配,请键入:

Get-ChildItem C:\Techdocs\*.ppt

在这种情况下,星号 (*) 通配符表示出现在文件扩展名之前 .ppt 的任何字符。

通配符表达式比正则表达式简单。 有关详细信息,请参阅 about_Regular_Expressions

PowerShell 支持以下通配符:

  • * - 匹配零个或多个字符
    • a* 匹配 aAagApple
    • a* 不匹配 banana
  • ? - 匹配该位置中的一个字符
    • ?n 匹配 aninon
    • ?n 不匹配 ran
  • [ ] - 匹配一系列字符
    • [a-l]ook 匹配 bookcooklook
    • [a-l]ook 不匹配 took
  • [ ] - 匹配特定字符
    • [bc]ookbook匹配 和cook
    • [bc]ook 不匹配 hook
  • `* - 将任何字符匹配为文本 (而不是通配符)
    • 12`*412*4
    • 12`*4 不匹配 1234

可以在同一个单词模式中包含多个通配符。 例如,若要查找名称以字母 al 开头的文本文件,请键入:

Get-ChildItem C:\Techdocs\[a-l]*.txt

在某些情况下,你可能希望匹配文本字符,而不是将其视为通配符。 在这些情况下,可以使用反引号 (`) 字符来转义通配符,以便使用文本字符值对其进行比较。 例如, '*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)"
  }
}

另请参阅