PowerShell Like 运算符:综合指南
PowerShell 中的 -like 运算符提供了一种执行字符串匹配和过滤的简单方法。虽然您可以使用 -eq 和 -contains 运算符进行基本字符串匹配,但 -like 运算符提供更灵活、更强大的通配符模式匹配功能。在本综合指南中,我们将探讨您需要了解的有关 PowerShell 中 like 的所有内容,包括其语法、运算符以及 -like 的高级用法,以查找字符串中的文本模式和过滤集合对象。我们还将通过易于理解的示例来介绍 switch 语句中的通配符、使用 -like 和 -notlike 来过滤集合、将 -like 与其他逻辑运算符组合等。在本指南结束时,您将能够掌握 PowerShell 等并提高您的 PowerShell 技能。让我们开始掌握 PowerShell 中的 -like 运算符!
类似 PowerShell 的运算符简介
PowerShell“-like”运算符是一个比较运算符,允许您根据特定模式匹配字符串。该运算符通常在 PowerShell 命令和脚本中用于过滤和搜索特定字符串,类似于 SQL 查询。如果输入字符串与指定模式 False 匹配,则返回布尔值 True,否则返回。使用 PowerShell 字符串的语法如下:
$string -like "pattern"
在此语法中,$string 是要比较的字符串,"pattern" 是要与该字符串匹配的模式。该模式可以包含通配符,例如 * 和 ?,它们分别允许您匹配多个字符或单个字符。
例如,如果要匹配所有以字母“H”开头的字符串,可以使用以下命令:
"Hello" -like "H*"
此命令将返回 True,因为字符串“Hello”以字母“H”开头。
对于单字符匹配,您可以使用 ?。
"bat" -like "b?t" # True
以下是一些常见的 -like 模式:
He*- 以“He”开头*Hello- 以“Hello”结尾*text*- 任何地方都包含“文本”H?llo- 匹配“H”和“llo”之间的一个字符
这使得 -like 对于字符串中的模式匹配非常灵活。
制作类似大小写敏感的
PowerShell 中的 like 运算符默认执行不区分大小写的比较,这意味着它将匹配字符串,无论其大小写如何。但是,您可以使用 -clike 运算符来执行区分大小写的比较。
"Hello" -clike "h*"
-clike 参数是区分大小写的版本。这将“Hello”与“h*”匹配。
PowerShellWhere Like - 过滤和搜索字符串
借助PowerShell的管道功能,您可以结合Where-Object使用-like来过滤数组或集合。此命令通常在 PowerShell 脚本和命令中用于过滤和搜索文件、文件夹或其他对象集合中的特定字符串。
使用 PowerShell where like 的语法如下:
$collection | where { $_.Property -like "pattern" }
在此语法中,$collection 是要过滤的对象集合,"pattern" 是要与其中每个对象的指定属性进行匹配的模式。集合。 -like 运算符用于执行字符串比较。
使用Where-Object 过滤数组:
-like 的一个常见用例是过滤字符串集合,例如,
$values = @("PowerShell", "PowerPoint", "PowerApps","Photoshop")
$pattern= "Power*"
$values | Where-Object { $_ -like $pattern }
这将返回“PowerShell”、“PowerPoint”和“PowerApps”,因为它们以“Power”开头。
PowerShell
PowerPoint
PowerApps
这是另一个例子:
$Files = "file1.txt","file2.csv","photo.jpg"
TextFiles = $files -like "*.txt"
让我们举一个现实世界的例子:如果您想过滤文件名集合以仅包含名称中包含“report”一词的文件,您可以使用以下命令:
Get-ChildItem | where { $_.Name -like "*report*" }
此命令将返回名称中带有“report”一词的文件对象的集合。
PowerShell 中的“NotLike”运算符
有时,您会想要检索与模式不匹配的元素。 NotLike 运算符的工作方式与 -NE 运算符类似,但右侧运算符可能包含通配符。为此,请使用 -notlike 运算符。
$strings -notlike "pattern"
例如:
$names = @("Alice", "Alicia", "Alisha")
$names | Where-Object { $_ -notlike "Alic*" } # Returns Alisha
现在返回“Alisha”,因为它不是以“Alic”开头。我们还可以过滤其他类型的对象,例如进程:
Get-Process | Where-Object Name -notlike "*Shell*"
这将获取除名称中包含“Shell”的进程之外的所有进程。
PowerShell If Like - 条件语句
PowerShell if like 是一个条件语句,允许您根据字符串是否与特定模式匹配来执行操作。此语句通常在 PowerShell 脚本和命令中使用,以根据字符串的内容执行操作。
使用 PowerShell if like 的语法如下:
if ($string -like "pattern") {
# Do something
}
在此语法中,$string 是您要比较的字符串,"pattern" 是您要与该字符串匹配的模式。如果字符串与指定的模式匹配,则将执行大括号内的代码。
例如,如果您想要执行一个以字母“A”开头的字符串的操作,您可以使用以下命令:
$string = "Apple"
if ($string -like "A*") {
Write-Host "The string starts with the letter A"
}
该命令将输出消息“字符串以字母 A 开头”,因为字符串“Apple”以字母“A”开头。
将 Like 运算符与逻辑 -And、-Or、-Not 运算符组合
类似 PowerShell 的运算符可以与 -and 、 -or 和 -Not 等逻辑运算符结合使用以进行多重比较。这种组合通常在 PowerShell 脚本和命令中用于执行复杂的字符串比较。
将 -like 与 -or 结合使用的语法如下:
$string -like "pattern1" -or $string -like "pattern2"
在此语法中,$string 是您要比较的字符串,"pattern1" 和 "pattern2" 是您要比较的模式与字符串匹配。 -like 运算符用于执行字符串比较,-or 运算符用于使用 OR 条件将它们组合起来。例如。,
$string -like "Hello" -and $string -notlike "Bye"
仅当 $string 匹配“Hello”但不匹配“Bye”时才返回 true。我们再举一个例子;如果要匹配所有以字母“A”开头或以字母“B”结尾的字符串,可以使用以下命令:
$string = "Apple"
if ($string -like "A*" -or $string -like "*B") {
Write-Host "The string starts with A or ends with B"
}
该命令将输出消息“字符串以 A 开头或以 B 结尾”,因为字符串“Apple”以字母“A”开头。类似地,AND 逻辑运算符可以用作:
$strings = @("PowerA", "PowerB", "MagicA", "MagicB")
$strings | Where-Object { $_ -like "Power*" -and $_ -like "*A" }
这将返回“PowerA”。我们还可以使用 -not 否定整个语句:
-not ($string -like "Hi" -or $string -like "Hello")
区别:-like 与 -match、-like 与 contains
-like 与 -match:
-like 使用通配符进行模式匹配,而 -match 运算符使用正则表达式模式(正则表达式)。它们很强大,但也更复杂。
"PowerShell" -match "^Power" # True, using regex to match the start of a string
类似与包含:
contains 运算符检查数组是否包含特定值,而 -like 检查字符串是否与模式匹配。
$array = @("apple", "banana", "cherry")
$array -contains "banana" # True
在 PowerShell 中使用 -Like 匹配多个值:
以下是使用类似 PowerShell 的运算符来匹配字符串中的多个值的示例:
$string = "cat, dog, turtle"
$string -like "*cat*"
$string -like "*dog*"
$string -like "*turtle*"
这将使用 -like 和通配符来搜索字符串中是否存在“cat”、“dog”和“turtle”。
为了匹配整个字符串,我们可以将 -like 与 -and 链接起来:
$string -like "*cat*" -and $string -like "*dog*" -and $string -like "*turtle*"
现在,只有找到所有三种动物,它才会返回 True。这是使用 -Or 运算符的另一个示例:
$usernames = @("john", "alice!", "bob#", "charlie$", "dave")
$usernames | Where-Object { $_ -like "*!*" -or $_ -like "*#*" -or $_ -like "*$*" }
这将获取所有带有特殊字符的值!#$: alice!, bob#, charlie$
将 -like 与 Switch 语句一起使用
我们还可以将 -like 与 switch 语句一起使用来检查多种模式。 switch 语句还支持 -like 进行模式匹配:
$name = "John"
switch ($name) {
{$_ -like "Jo*"} {"Name starts with Jo"}
{$_ -like "*hn"} {"Name ends with hn"}
}
由于 $name 与第一个模式匹配,因此会打印“Name Starts with Jo”。这是在 Switch 语句中使用通配符表达式的另一种方法:
switch -Wildcard ($string) {
"*cat*" {Write-Host "Found cat"}
"*dog*" {Write-Host "Found dog"}
"*turtle*" {Write-Host "Found turtle"}
}
如果任何类似通配符模式匹配,这将切换 $string 并打印一条消息。
使用 Like 运算符转义通配符
要匹配 *、? 等文字字符,请使用正则表达式对它们进行转义,而不是使用通配符:
- *:代表零个或多个字符。
- ?:代表单个字符。
$queries = @("What's PowerShell?", "How to code?", "Learn PowerShell")
$queries | Where-Object { $_ -like "*[?]" }
# Returns "What's PowerShell?" and "How to code?"
在模式中使用变量是一种允许您使用变量来定义模式的技术。这在您需要根据用户输入或其他变量动态构造模式的情况下非常有用。
PowerShell 字符串类示例
为了帮助您了解类似 PowerShell 的实际工作原理,让我们看一些示例。
示例1:匹配特定字符串
您可以使用它来比较整个字符串:
$string = "Hello, world!"
if ($string -like "Hello, world!") {
Write-Host "The string matches"
}
该命令将输出消息“字符串匹配”。
示例 2:使用通配符匹配模式
$productCodes = @("CAT45123", "DOG56789", "CAT45234", "FISH98765")
$productCodes | Where-Object { $_ -like "CAT45*" }
该命令将输出 CAT45123、CAT45234。
这是另一个示例:假设您想要查找特定域中的所有地址,例如 *@example.com。
$emails = @("john@example.com", "alice@gmail.com", "bob@example.com")
$emails | Where-Object { $_ -like "*@example.com" }
您想要从日志文件中获取记录了错误或警告的所有行:
Get-Content C:\Temp\AppLog.txt | Where-Object { $_ -like "*ERROR*" -or $_ -like "*warning*" }
示例 3:使用 NotLike 运算符过滤文件
让我们使用 NotLike 按特定类型过滤文件:
Get-ChildItem -Path C:\Images -File | Where-Object { $_.Name -notlike "*.jpg" -and $_.Name -notlike "*.png" }
这会过滤掉所有 JPG 和 PNG 文件。
示例 4:单字符模式匹配
$EmployeeNumber = "Emp-456-7890"
if ($EmployeeNumber -like "???-???-????") {
Write-Host "The string matches the Employee number pattern"
}
此命令将输出消息“字符串与员工编号模式匹配”,因为该字符串与员工编号的模式匹配。在这里,每个 ? 匹配任何单个字符。这将匹配符合以下格式的任何字符串:三个字符、一个连字符、另外三个字符、另一个连字符,然后是四个字符。
回顾和要点
从本质上讲,PowerShell 中的 -like 运算符有助于通配符字符串比较。它检查字符串是否符合指定的模式,从而实现精确匹配和模糊匹配。本文介绍的有关 PowerShell 的 -like 运算符的要点包括:
-like使用通配符模式匹配来比较字符串- 使用
*和?通配符来匹配文本模式 - 使用
-like和-notlike过滤数组等集合 - 适用于哈希表、数组、进程等
- 使用
-clike实现不区分大小写的匹配 - 转义特殊字符以按字面匹配它们
- 结合
-and、-or、-not实现复杂逻辑
总之,-like 运算符在 PowerShell 中提供了强大的字符串模式匹配功能,类似于 SQL 查询。使用 -like 和 -notlike 可以轻松搜索和过滤 PowerShell 脚本中的文本字符串。 PowerShell 还支持多种比较运算符(Eq、Ne、Lt、Gt、Ge、Le 等)。这是我的另一篇文章:如何在 PowerShell 中使用比较运算符?
结论和后续步骤
总之,掌握 PowerShell 类似字符串是任何 PowerShell 用户的一项基本技能。通过了解 PowerShell 字符串等语法、运算符和高级技术,您可以提高 PowerShell 技能并轻松执行复杂的字符串比较。从基本字符串比较到高级数据过滤,了解如何熟练使用 -like(及其相关项,例如 -notlike、-match、-NotMatch 以及 -Contains 和 -NotContains)将极大增强您的 PowerShell 脚本编写技能。无论您是刚刚进入 PowerShell 世界的初学者,还是希望提高技能的专家,了解如何有效使用“Like”运算符都可以极大地提高您的 PowerShell 脚本编写技能。

