2014-10-28 47 views
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。

这应该是什么样子?

谢谢。

回答

0

运行这段代码:

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].?") 
0

只是为了阐述亚当的回答。您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.?")$falseIf($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。当逻辑不按照你想要的方式行事时,你只需要括号。