Batch file 我如何分批听击键

Batch file 我如何分批听击键,batch-file,Batch File,我需要我的代码在一个子程序中循环,直到按下一个键。我不知道怎么做。有什么帮助吗 您可以尝试以下方法: 击球 Main.bat 您可以将其用于enter,如果您没有choice.exe,则可以将超时和默认扩展名用于choice命令 例: 在这种情况下,Choice命令每1秒自动选择Q作为默认选项,因此如果用户键入Q,它将在循环中跳过1秒。但是,如果他们键入除1、2、3之外的任何数字键,程序将显示日期。如果用户键入1,程序将执行选项1,并对2和3执行相同的操作 任何其他钥匙都不会起任何作用。唯一的缺

我需要我的代码在一个子程序中循环,直到按下一个键。我不知道怎么做。有什么帮助吗

您可以尝试以下方法:

击球 Main.bat 您可以将其用于enter,如果您没有choice.exe,则可以将超时和默认扩展名用于choice命令 例:

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

@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
延迟回答,但不使用选项或设置/p,而是替换。 这就是想法:

@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选项


编辑:现在支持;默认下线

如果您希望在特定时间内未按下任何键时定义默认操作,可以使用以下选项定义按键:

@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注释:将返回所有大写字母


通过使用call with:Label子例程并定义所有选项,可以避免恼人的errortone,并通过对调用结果使用| |条件测试来输出自定义消息。当存在多个选项时,标签方法还避免了复杂且通常混乱的条件测试。

嗨,Jonathan,堆栈溢出最适用于您尝试过某件事情并被卡住的情况。你有什么代码可以添加到这里,让我们知道你在哪里卡住了吗?有关详细信息,请参阅。查看此堆栈溢出帖子:它只检测批处理文件中的按键,因此由于方法的类型,您必须单击窗口并按键;DOne可以直接在命令上使用for循环完全丢弃临时文件。对于/F Usebackq令牌=*Delims=%%K in'replace/u/w“Do Set Key=%%Kwith”被替换为“@T3RR0R”不适用;虽然我的脚本也很简单,如果;这是需要的。定义:设置SC=按任意键继续…=;和子字符串修改键:设置键=!密钥:%SC%!仍然保存有关脚本的外部文件要求,是的。还有一个办法可以解决失去的问题!在你的剧本里。将Setlocal EnableDelayedExpansion的位置重新定位到设置键之后和之前!钥匙这句话引起了共鸣。
: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
@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
@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!]
@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