无需按 Enter 键即可获取两个字符变量(PowerShell/CMD)

无需按 Enter 键即可获取两个字符变量(PowerShell/CMD)

Bash 脚本:

#! /bin/bash
read -n 2 -p '2 digit:' ans;
echo $ans

当我输入完两个字符时,脚本继续运行,而不等待我按下enter
我按下的内容将保存到变量$ans。例如,
如果我按下,则值为。A2$ansA2


powershell 或 cmd 是否具有上述 bash 之类的功能?无需按 Enter
即可获得 a (来自/ / / 或其他)。 据我所知,仅限于 1 个字符。同时,(PowerShell) 或(cmd) 需要按 Enter。 或者可能还有其他我还不知道的功能。two character variableChoiceRead-Hostset /p
choiceRead-Hostset /p

答案1

使用批处理,您可能只要求输入一个字符串,然后将其截断为两个字符。用户需要按 Enter 键才能完成输入字符串。

我假设您希望脚本在输入两个字符后自动继续,而无需按 Enter。

使用 PowerShell 即可实现 Console.ReadKey 方法

您的代码可能看起来像:

$InputChar1 = [console]::ReadKey()
$InputChar2 = [console]::ReadKey()

答案2

作为文档我所做的。也许对那些需要它的人有用。

choice仅限一个字符,并且Read-Host或者set /p需要按 Enter 键。
因此,如果有许多选项不能使用默认选项并且不喜欢按 Enter 键,此脚本非常有用。
如果有很多菜单选项,那么另一种方法是使用two-character选项,无论是在 cmd 还是 powershell 中。

感谢所有通过回答或评论提供帮助的人。
-命令

@echo off
:choice2
CLS
set KEYS=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
set K3YS= %KEYS%
choice /n /c %K3YS% /m "Choose: "
call set KEY1=%%K3YS:~%errorlevel%,1%%
CLS
choice /n /c %K3YS% /m "Choose: "
call set KEY2=%%K3YS:~%errorlevel%,1%%
CLS

set KEY=%KEY1%%KEY2%
echo Your Choice '%KEY%'
pause
goto :choice2

- 电源外壳

function choice2 {
    CLS 
    $KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    choice /n /c $KEYS /m 'Choose: '
    $KEY1 = $KEYS[($LastExitCode -1)]
    CLS
    choice /n /c $KEYS /m 'Choose: '
    $KEY2 = $KEYS[($LastExitCode -1)]
    CLS
    
    $KEY = -join @($KEY1; $KEY2)
    "Your Choice `'$($KEY)`'"
    pause
    choice2
}
choice2

使用[console]::ReadKey()更简单

function read {
    CLS
    write-host 'Choose:' -nonewline
    $KEY = -join $(@([console]::ReadKey();[console]::ReadKey()) | Foreach KeyChar)
    CLS
    "Your Choice `'$($KEY)`'"
    pause
    read
}
read

相关内容