【发布时间】:2019-02-19 08:07:00
【问题描述】:
无论出于何种原因,While 循环自行工作,Switch 语句自行工作,当我将它们组合时.. While 循环工作正常,但 Switch 语句.. 不是那么多。
y 或 n 只是 While 循环接受的值,问题是当我给它 y 或 n 时,没有任何代码被执行,脚本就完成了。
PowerShell 版本为 5.1。
While (($UserInput = Read-Host -Prompt "Are you sure? (y/n)") -notmatch '^n$|^y$') {
Switch ($UserInput) {
'y' {
Try {
Write-Output "Success."
}
Catch {
Write-Output "Error."
}
}
'n' {
Write-Output "Cancelled."
}
}
}
【问题讨论】:
-
这就是您的代码似乎要做的——[1] 获取输入 [2] 测试它是否不匹配 只有
y或n[ 3] 如果它没有通过测试 [y或n以外的任何东西],它将针对 y 或 n !!!!!! [grin] ///// 您已经确定它不会包含其中任何一个...那么您为什么希望触发两个开关值中的任何一个?您需要包含一个default来处理不匹配项。 ///// 同样,try/catch在那里什么也没做......你想用它做什么? -
嗯,它应该匹配 y (继续执行命令)或 n (结束脚本),而当 y 或 n 没有提供时,它应该保留在循环中。至于 try/catch,我最初有一些其他代码,但这没关系,因为它甚至不会输出简单的
Write-Outputcmdlet。 -
说真的,遵循您的代码逻辑。 [grin] 它永远不会到达
switch,因为while说“只有在既没有输入“n”也没有输入“y”的情况下运行循环代码。 -
是的,有点奇怪。但是当我使用 -match 时,循环中断了。如果我输入 y 或 n,正确的块将被执行,但是当我输入其他内容时,它只会结束脚本。这不完全是一个循环。我最终使用了
not -notmatch,如下图@Mudit Bahedia 所示,并通过在每个输出中添加return 进行了一些更改,否则循环不会结束。
标签: powershell while-loop switch-statement