Answers:
该-Contains
运营商没有做串比较和匹配必须是一个完整的字符串,用于搜索集合。
从您链接到的文档中:
-包含说明:遏制运算符。判断参考值的集合是否包含单个测试值。
在您提供的示例中,您正在使用仅包含一个字符串项的集合。
如果您阅读了链接到的文档,将看到一个示例来演示此行为:
例子:
PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
我认为您想要的是-Match
操作员:
"12-18" -Match "-"
哪个返回True
。
Contains
powershell运算符和.Contains()
.NET String
方法之间的区别。
-Match
使用正则表达式。这意味着string参数是一个正则表达式,而不是普通的字符串。例如,"hello" -Match "."
将返回true,因为它"."
是一个正则表达式,其中“。” 将匹配任何字符。要检查字符串是否包含句号:("hello" -Match "\."
返回false)
-Contains
实际上是一个集合运算符。如果集合包含对象,则为true。它不仅限于字符串。
-match
和-imatch
是正则表达式字符串匹配器,并设置自动变量以与捕获一起使用。
-like
,-ilike
是类似SQL的匹配器。
您可以使用like
:
"12-18" -like "*-*"
或split
为contains
:
"12-18" -split "" -contains "-"
like
最好,或者至少最简单。match
用于正则表达式比较。参考:https : //docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6
"12-18".Contains("-")