2014-08-28 48 views
0

我有以下腳本導致問題。它正在做一個簡單的檢查,看看輸入的字符數是7還是8.然而,即使在輸入7或8個字符後,它也不會移到else語句上並顯示「無效字符數」。Powershell - 或多次檢查

如果我刪除-or並堅持只是一個檢查,那麼它工作正常。在使用-or操作符進行檢查時,似乎無法使其工作。我發現的所有例子似乎都暗示代碼應該正常工作,所以任何人都可以發現我錯過的東西嗎?

Function number { 
$global:change = read-host "Enter a number" 
    if ($global:change.length -ne 7 -or $global:change.length -ne 8) { 
     write-host $global:change.length 
     write-host -foregroundcolor red "Invalid number of characters" 
     number 
    } 
    else { 
     write-host "You entered the correct amount of characters" 
    } 
} 

number 

回答

1

你只需要翻轉你的邏輯有點得到這個工作。根據您的代碼中的邏輯,其中一種情況將始終爲真。如果您將代碼更改爲以下內容,您將獲得所需的效果。

Function number { 
    $global:change = read-host "Enter a number" 
    if (($global:change.length -eq 7) -or ($global:change.length -eq 8)) 
    { 
     write-host "You entered the correct amount of characters" 
    } 
    else 
    { 
     write-host $global:change.length 
     write-host -foregroundcolor red "Invalid number of characters" 
     number 
    }  
} 

number 

這將測試您輸入的值是7還是8,如果輸入了其他值,則循環。

+0

打敗我吧。這些條件需要單獨進行評估,並用方括號表達式進行評估,然後才能用 - 或 - 進行測試。 – Matt 2014-08-28 11:20:46

+0

偉大的東西,這工作得很好。謝謝。 – Saf 2014-08-28 11:36:53

0

變化,在這樣的-and或風格的代碼-or:

Function number { 
$global:change = read-host "Enter a number" 
    if ($global:change.length -eq 7 -or $global:change.length -eq 8) { 
     write-host "You entered the correct amount of characters" 
    } 
    else { 
     write-host $global:change.length 
     write-host -foregroundcolor red "Invalid number of characters" 
     number 
    } 
} 

number 
+1

這些條件需要單獨進行評估,然後才能使用-or進行測試。看到布拉登回答 – Matt 2014-08-28 11:20:12