瓦尔在我这,这不工作:
$var1 = "6.0.6001"
$var2 = "6.1.7001"
$var3 = "6.2.8074"
$var4 = "6.3.8074"
if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?") {
write-host "1"
}else{
write-host "2"
}
不管是什么,则返回1。
这应该是什么样子?
谢谢。
瓦尔在我这,这不工作:
$var1 = "6.0.6001"
$var2 = "6.1.7001"
$var3 = "6.2.8074"
$var4 = "6.3.8074"
if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?") {
write-host "1"
}else{
write-host "2"
}
不管是什么,则返回1。
这应该是什么样子?
谢谢。
运行这段代码:
if("6.2.?" -or "6.3.?") {
write-host "1"
}else{
write-host "2"
}
它也将返回1不管是什么。
更改您的条件:
if($var1 -match "6.1.?" -or $var1 -match "6.2.?" -or $var1 -match "6.3.?")
甚至更好:
if($var1 -match "6.[1-3].?")
只是为了阐述亚当的回答。您If
说法是不工作的打算,因为PowerShell中只看到了三个条件你没有打算
if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?")
if(($var1 -match "6.1.?") -or ("6.2.?" -or "6.3.?"))
的上面两行的功能相同。打破第二个操作("6.2.?" -or "6.3.?")
多一点:转换为布尔值的非零长度字符串将始终为$true
。比较两个非零长度的字符串与-or
将始终返回$true
。在你的例子中的第一个条款($var1 -match "6.1.?")
是$false
。 If($true -or $false)
本质上就是你的If
声明归结为哪个,它总是会返回$true
。亚当斯答案显示如何得到你正在寻找的逻辑
if($var1 -match "6.1.?" -or $var1 -match "6.2.?" -or $var1 -match "6.3.?")
if(($var1 -match "6.1.?") -or ($var1 -match "6.2.?") -or ($var1 -match "6.3.?"))
以上两个语句都是相同的。第二个有助于理解逻辑。欲了解更多信息,请参阅about_Logical_Operators。当逻辑不按照你想要的方式行事时,你只需要括号。