繁体   English   中英

在PowerShell中读取单个按键(整数)

[英]Read individual key presses (integers) in PowerShell

我知道这个问题,但它没有回答我目前的问题。

我知道当前行给了我下一个按键:

$Host.UI.RawUI.ReadKey().Character

例如,如果我按1 ,我得到1

但这是一个字符串(好吧,实际上是一个字符),我希望数字为整数。

我试着用:

[int]$Host.UI.RawUI.ReadKey().Character

和:

$Host.UI.RawUI.ReadKey().Virtualkeycode

但是在这两行中,如果按1 ,则会得到49

我知道我可以做到:

[int]$Host.UI.RawUI.ReadKey().Character - 48

但我想知道是否有更好的方法来做到这一点。 例如,如果我想获得字母和数字, -48的使用会更加困难,因为我需要使用一些条件块。

所以,我的问题是: 有没有更好的方法来将按下的键(数字)作为整数而不是[int]$Host.UI.RawUI.ReadKey().Character - 48

你有一个选项是System.Int32.Parse方法:

PS> [int]::Parse

OverloadDefinitions
-------------------
static int Parse(string s)

正在使用:

$in = $Host.UI.RawUI.ReadKey().Character
[int]::Parse($in)

如果您认为用户将输入非整数System.Int32.TryParse您也可以使用System.Int32.TryParse

PS> [int]::TryParse

OverloadDefinitions
-------------------
static bool TryParse(string s, [ref] int result)

正在使用:

[int] $out = 0
$in = $Host.UI.RawUI.ReadKey().Character
if ([int]::TryParse($in, [ref]$out)) {
    $out
}
else {
    Write-Warning 'Non-int entered!'
}

另一种方法:

# (will return $null if non-numeric character entered)
$int = switch -regex ([console]::readkey($true).keychar) {'[0-9]' {[int]"$_"}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM