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

时间:2019-02-21 14:54:46

标签: powershell

我知道这个question,但是它无法回答我当前的问题。

我知道当前行为我提供了下一个按下的键:

$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

2 个答案:

答案 0 :(得分:4)

您可以选择使用System.Int32.Parse方法:

PS> [int]::Parse

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

使用中:

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

如果您认为用户输入的内容不是整数,也可以使用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!'
}

答案 1 :(得分:2)

另一种方法:

<Company>
    <Employee>
        <EESSN>111111111</EESSN>
        <Dependent>
            <SSN>222222222</SSN>
        </Dependent>
    </Employee>
</Company>