我正在使用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
任何想法或支持将不胜感激。再次谢谢!
答案 0 :(得分:2)
批处理文件不是为此类任务设计的,但可以以有限的方式执行某些高级管理。下面的子例程使用choice
命令来获取输入键,因此不允许使用Enter键结束输入,也不允许使用BackSpace删除字符;它使用0
和1
键来执行此类任务。
@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