PowerShell ReadKey()区分大小写问题:输入大写A时识别异常求助
解决PowerShell ReadKey捕获大写字母时误触发Shift键的问题
这个问题我之前也碰到过!原因确实是ReadKey默认会捕获所有按键事件——包括Shift这类修饰键的按下/抬起,而当你按Shift+A输入大写A时,Shift键的事件会先被触发,导致你的代码拿到的是Shift的空字符,而非A。
这里有个简单可靠的解决办法:我们只捕获有实际输出字符的按键事件,过滤掉Shift、Ctrl这类没有对应字符的修饰键。修改后的代码如下:
Write-Host "Please press a or A:" do { $keyInfo = $host.UI.RawUI.ReadKey('NoEcho, IncludeKeyDown') # 循环直到获取到包含有效字符的按键(排除修饰键) } while (-not $keyInfo.Character) $choice = $keyInfo.Character if ($choice -ceq "a") { Write-Host "You pressed a" } elseif ($choice -ceq "A") { Write-Host "You pressed A" } else { Write-Host "You pressed neither a nor A" } Pause
代码说明:
- 用
do-while循环持续读取按键,直到拿到一个带有Character值的按键——Shift、Alt这类修饰键的Character属性是空的,所以会被循环跳过。 - 只保留
IncludeKeyDown参数,去掉IncludeKeyUp,避免捕获按键抬起的冗余事件,减少干扰。 - 当你按下Shift+A时,Shift键会被循环过滤掉,直到A的按下事件被捕获,此时
Character就是大写的A,你的判断逻辑就能正常工作了。
这个方法能完美区分大小写,而且不会被修饰键干扰,亲测有效!
内容的提问来源于stack exchange,提问作者Blue Day
相关产品推荐
相关产品推荐

