Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PowerShell中读取单个按键(整数)_Powershell - Fatal编程技术网

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

在PowerShell中读取单个按键(整数),powershell,Powershell,我知道这一点,但它没有回答我目前的问题 我知道当前行给了我下一个按下的键: $Host.UI.RawUI.ReadKey().Character 例如,如果我按1,我会得到1 但这是一个字符串(实际上是一个字符),我希望数字是一个整数 我尝试: [int]$Host.UI.RawUI.ReadKey().Character 以及: 但在这两行中,如果按1,则会得到49 我知道我可以简单地做到: [int]$Host.UI.RawUI.ReadKey().Character - 48 但我想

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

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

$Host.UI.RawUI.ReadKey().Character
例如,如果我按
1
,我会得到
1

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

我尝试:

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

但在这两行中,如果按
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)
[int] $out = 0
$in = $Host.UI.RawUI.ReadKey().Character
if ([int]::TryParse($in, [ref]$out)) {
    $out
}
else {
    Write-Warning 'Non-int entered!'
}

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

PS> [int]::TryParse

OverloadDefinitions
-------------------
static bool TryParse(string s, [ref] int result)
使用中:

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

$int = switch -regex ([console]::readkey($true).keychar) {'[0-9]' {[int]"$_"}}

(如果输入非数字字符,将返回
$null

是的,一定要使用TryParse!你的回答是可行的,但我宁愿等一段时间再接受。顺便说一下,为了使用TryParse,我必须将
[int]$out
修改为
[int]$out=0
。否则我会得到
不存在的VariableReference
。它实际上不是一个字符串,而是一个字符。@marsze,噢,我不知道。我是新来的。