2014-10-28 69 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。當邏輯不按照你想要的方式行事時,你只需要括號。