如何批量监听击键

问题描述 投票:0回答:6

我需要我的代码循环执行子例程,直到按下某个键。我不知道该怎么做。有什么帮助吗?

batch-file
6个回答
3
投票

您可以使用 Choice 命令的 timeoutdefault 扩展 例如:

:start
@echo off
cls
:loop1 
cls
echo press 1 for option 1 
echo press 2 for option 2 
echo press 3 for option 3 
echo press any other number key to tell the date
echo.
echo %time%
choice /t 1 /c 123456789q /d q >nul
if %errorlevel% EQU 10 goto loop1
if %errorlevel% EQU 1 goto 1
if %errorlevel% EQU 2 goto 2
if %errorlevel% EQU 3 goto 3
if %errorlevel% GEQ 4 goto end
goto loop1
:1
echo.
echo.
echo option 1 
echo.
pause 
exit 
:2
echo.
echo.
echo option 2
echo.
pause 
exit 
:3
echo.
echo.
echo option 3
echo.
pause 
exit 
:end
echo %date%
pause
Exit

在这种情况下,Choice命令每隔 1 秒自动选择 Q 作为默认选择,因此如果用户键入 Q,它只会在循环中跳过 1 秒。但是,如果他们输入除 1、2、3 之外的任何数字键,程序都会显示日期。如果用户输入 1,程序将执行选项 1,并且执行选项 2 和 3 任何其他键都不会执行任何操作。唯一的缺点是你最多需要等待 1 秒,并且你必须为循环保留一把钥匙


3
投票

或者您可以直接输入:

@echo off
color 0a
title KeyStrokeSim
goto Start

:Start
cls
echo Press D or F to continue...
choice /c df /n
if %errorlevel%==1 goto Finished
if %errorlevel%==2 goto Finished

:Finished
echo You have Pressed D or F!
pause
goto Start

1
投票

迟到的答案,但使用

choice
SET /P
,而是使用
replace

这是这个想法:

@echo off
SETLOCAL EnableDelayedExpansion
echo Press any key...

>keystroke.txt replace ? . /u /w
FOR /F delims^=^ eol^= %%K in (
'2^>nul findstr /R "^" "keystroke.txt"'
) do set "key=%%K"

del /f /q "keystroke.txt"
echo You pressed: [!key!]

该脚本利用了

/W
REPLACE
选项。

编辑:现在支持

;
(默认
eol


0
投票

你可以试试这个:

中风.bat

@echo off
Echo. > Temp.txt
:: You require choice.exe for this
choice /c 1234567890qwertyuiopasdfghjklzxcvbnm
Echo 1 > Temp.txt

主.bat

@echo off
set var=
:: Code Prior to Loop


:: Loop starts below
start /b stroke.bat
:loop

::: Loop Code Goes here
:: 
:: You will not be able to take user-input in loop
:: Do not tamper with "var"
:: To force exit the loop just "goto end"
:: Note if you force exit the loop you will need to exit this bat
::   and start a new window (since Stroke will be running)
::
::: End of loop

<Temp.txt set /p var=
if "%var%" NEQ "1" goto loop
:end

:: Post loop code
Exit

这应该适用于任何字符或数字,但不适用于标点符号或 Enter、空格等。

您可以将其修改为仅适用于输入,方法是将

choice
替换为
set /p
:

@echo off
Echo. > Temp.txt
set /p v=
Echo 1 > Temp.txt

您可以使用它来

enter
,如果您没有
choice.exe


0
投票

如果您想定义在一定时间内没有按键按下的默认操作,您可以使用如下选项来定义按键:

@Echo off
:ExampleLoop
    Echo.[A] Action [B] Alternate Action
    For /F "delims=" %%C in ('Choice /T 10 /N /C:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 /D B') Do (
        CLS & Set "Choice=%%C" & Call :Choice[1-%%C] || (CLS & Echo. %%C is not a valid Choice)
    )
Goto :ExampleLoop

:Choice[1-A]
    Echo %~0
    Echo Elective Command
Exit /B 0
:Choice[1-B]
    ECHO %~0
    Echo Default Command
Exit /B 0

上面将返回文字键而不是 ErrorLevel(注意:将返回所有大写字母)。

通过使用带有 :Label 子例程的调用,并定义所有选择选项,可以避免烦人的错误音,并通过在调用结果上使用

||
条件测试输出自定义消息。当存在多个选项时,标签方法还避免了复杂且通常混乱的条件测试的需要。


0
投票
@echo off

for /f skip^=1^usebackq^ ^delims^= %%G in =;(
   `3^>^&0 replace ? . /u /w`);= do set "_keystroke_1=%%~G"
BackspaceEnter

echo/1%_keystroke_1%2

for /f skip^=1^usebackq^ ^delims^= %%G in =;(
   `3^>^&0 replace ? . /u /w`);= do set "_keystroke_2=%%~G"

if %_keystroke_2% equ 0 echo/%_keystroke_2% 

结果:

2
0
© www.soinside.com 2019 - 2024. All rights reserved.