2016-08-08 16 views
2

ループをwhileループとして使用してメニューを作成しようとしています。ユーザーが「n」または「N」を押すまで、メニューを実行します。whileループが "n"を押したときに終了しない

$MenuChoice 

while ($MenuChoice -ne "n" -or $MenuChoice -ne "N") { 
    Write-Host "Run again? y/n " 
    Read-Host $MenuChoice 
} 

"N"か "Y"を押すかどうかは問題です。

$MenuChoiceの値を宣言する必要がありますか?

答えて

2

あなたは$MenuChoiceRead-Hostの出力を割り当てる必要があります:

# Initial value (in case this is run more than once) 
$MenuChoice = $null 
# This comparison is not case-sensitive 
while ($MenuChoice -ne 'n') { $MenuChoice = Read-Host 'Run again? [y/n]' } 
+0

ありがとうございます。したがって、$ nullは何をしますか?それはパワーシェルにまだ価値がないと伝えていますか? –

+0

@TonyAntony変数を初期化して存在させます。 'Get-Variable TestVar'を試してみると、エラーが返されます。それから '$ TestVar = $ null'を実行してやり直してください。あなたは違いを見るでしょう。 – briantist

+0

@TonyAntony代わりに 'Remove-Variable MenuChoice'があります。ループ終了条件を早期にトリガーする可能性のある変数に値が存在しないことを保証します。あなたは、ブライアントによって示唆されたようにdoループを使用することによって、これを避けることができます。 –

0

別の代替、Chris Dent's answerに構築し、do {} while()ループを使用します。

do { 
    $MenuChoice = Read-Host 'Run again? [y/n]' 
} while ($MenuChoice -ine 'n') 

は(もおよそ明示する-ineを使用して大文字と小文字を区別しない比較。-neはデフォルトでは大文字と小文字を区別しません)

関連する問題