Pause命令退出Enter和Escape键,但不会返回独特的ErrorLevel 按任何Enter或Escape键时,Choice命令不会返回。
答案 0 :(得分:3)
为了检测ENTER你可以使用XCOPY,真的...
但是对于纯批次来说,检测单个ESC似乎是不可能的。
setlocal EnableDelayedExpansion
call :GetKey
if "!key!"=="" echo ENTER
if "!key!"==" " echo SPACE
exit /b
:GetKey
set "key="
for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
if not defined key set "key=%%L"
)
set "key=%key:~-1%"
exit /b
这是有效的,因为xcopy /L /W
要求按键开始复制,然后它会显示密钥并结束。
答案 1 :(得分:1)
您可以使用choose32.exe(http://www.westmesatech.com/editv.html)执行此操作:
choose32 -c ^A^[ -d ^A -q -n -p "ESC to quit, ENTER to continue: "
^ A是Ctrl + A(ASCII字符1),^ [是Ctrl + [(ASCII字符27或Esc)。命令行细分:
在这种情况下,如果按下Esc,则select32返回退出代码2,如果按下Enter则退出代码1。
答案 2 :(得分:0)
我发现这个问题很有趣,并希望添加另一个可能的解决方案,powershell ReadKey
<强>命令强>
PowerShell Exit($host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').VirtualKeyCode);
的用法强>
@echo off
set /p "=> Single Key Prompt? " <nul
PowerShell Exit($host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').VirtualKeyCode);
echo KeyCode = %ErrorLevel%
输出:输入密钥
> Single Key Prompt?
KeyCode = 13
输出:退出键
> Single Key Prompt? KeyCode = 27
<强>参考强>
TechNet
PS Pause Alternative