在批处理文件中实现定时输入。 (倒计时到一分钟)

时间:2015-06-10 04:45:10

标签: windows batch-file cmd countdowntimer

我正在使用Windows 8编写批处理文件,但我在批处理文件中实现了计时器。我想询问用户的输入并给他们一分钟输入他们的输入。一旦时间到达一分钟,然后显示消息,如时间结束'。因此,时间将从1秒开始,以60秒结束,或者从60秒开始,然后下降到0秒。要么工作得很好。 此外,我希望计时器显示在屏幕上的某个位置,以便他们可以看到倒计时。此外,在计时器运行时,我希望用户能够键入单词并按Enter键。该程序不会让用户等待,但是一旦用户输入一个单词(以先到者为准),它将等到时间结束。在他们输入一个有效的单词后,我想将该单词存储在某个变量中并执行类似的操作(转到VALIDWORD或echo这是一个有效的单词!) 我不知道这是否可以在批处理文件中使用,并且有更多高级语言可供使用,但我想使用批处理脚本完成此程序。谢谢。 以下是我的概念:

@echo off
:Start
color EC
set /a time =60

:loop
cls
if %time% EQU 0 goto Timesup
if %time% LEQ 60 goto CONTINUE

:CONTINUE
ping localhost -n 2 >nul
set /a time-=1
set /p cho=     Enter your word: 
echo Remaing Time: %time%
goto loop

:Timesup
echo The time is over!
exit

任何想法或支持将不胜感激。再次谢谢!

1 个答案:

答案 0 :(得分:2)

批处理文件不是为此类任务设计的,但可以以有限的方式执行某些高级管理。下面的子例程使用choice命令来获取输入键,因此不允许使用Enter键结束输入,也不允许使用BackSpace删除字符;它使用01键来执行此类任务。

@echo off
setlocal

call :ReadTimedInput 60 word=
echo Word read: "%word%"
goto :EOF


:ReadTimedInput seconds result=
setlocal EnableDelayedExpansion

set /A seconds=100+%1
set "letters=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a"
for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"

echo Enter a word; press 0 to End, press 1 to Clear
:clear
set /P "=X!CR!                                     !CR!" < NUL
set "result="
:loop
   set /P "=X!BS! !CR!%seconds:~-2%: %result%" < NUL
   choice /C ¡10%letters% /N /CS /T 1 /D ¡ > NUL
   if %errorlevel% equ 1 goto tick
   if %errorlevel% equ 2 goto clear
   if %errorlevel% equ 3 echo/& goto endInput
   set /A char=%errorlevel%-4
   set "result=%result%!letters:~%char%,1!"
   :tick
   set /A seconds-=1
if %seconds% gtr 100 goto loop
echo !CR!00
set "result=Time out"
:endInput
endlocal & set "%2=%result%"
exit /B