当我这样做时($env:path).split(";")
,有许多元素包含字符串bin
。我想要一个列表。我尝试:
($env:path).split(";") | Where-Object {$_ -contains "bin" }
但是没有结果。如果我将运算符更改为-notcontains
,它会列出所有路径,无论是否包含字符串。如何使其工作?
当我这样做时($env:path).split(";")
,有许多元素包含字符串bin
。我想要一个列表。我尝试:
($env:path).split(";") | Where-Object {$_ -contains "bin" }
但是没有结果。如果我将运算符更改为-notcontains
,它会列出所有路径,无论是否包含字符串。如何使其工作?
您使用了错误的比较运算符。
-contains
检查 Collection(array\list\etc) 是否包含一个特定元素。@('Z', 'A', 'Q', 'M') -contains 'A'
返回$true
但是您正在使用数组的单个字符串:因此您需要使用
-like
(用于简单通配符匹配)或-match
(用于正则表达式匹配)所以
($env:path).split(';') | Where-Object { $_ -match 'bin' }
此外,采用更 powershell-y 的方式
$env:path -split ';' | Where-Object { $_ -match 'bin' }
编辑:这是为了走得更远!
$env:path -split ';' -Match 'bin'
(感谢@iRon)(请注意,我尽可能简单地进行了匹配,作为示例,您需要测试它是否能满足您的需要)
有关比较运算符的更多信息