循环中的批处理文件选择

时间:2014-02-25 21:04:49

标签: batch-file

我发现使用选择命令很简单..但如果我想在时钟中使用它会怎样 所以我有一个永远持续的循环时钟,但是当我按“m”时,我希望它打开一个菜单

@Echo off

:clock

::do stuff here

choice /c m /n

::Errorlevelstuff

goto :clock

但选择让它等待.. 我提出的唯一解决方案是使用/ t但是它增加了一个我不想要的时间“我正在使用另一个变量来设置时钟滴答率”所以

  

有没有办法检查是否有人在时钟循环中按下了键

1 个答案:

答案 0 :(得分:1)

简单回答

使用choice /t作为时钟标记。

@echo off
setlocal
set "count=0"
:clock
echo Seconds: %count%
choice /t 1 /c am /d a >nul
if %ErrorLevel% equ 2 goto done
set /a "count+=1"
goto clock
:done
echo Menu
pause
endlocal

注意:选择的超时粒度限制为秒,范围为1到9999秒。此外,使用基于软件的时钟会有时间衰减。从粗略的快速测试中,这大约是每秒1/10秒的衰变。这意味着这个时钟将持续10秒钟1秒钟。

OP的相关帖子


无衰减时钟示例

my answer to your other question以来,我创建了这个不易受脚本衰减影响的时钟,因为它根据每个时钟的OS时钟进行调整。这意味着,即使脚本中存在衰减,时钟也不会显示错误的时间。

@echo off
setlocal
:initialize
set "s=10"
set "m=10"
:: Note Offset
set "xs=%time:~6,1%" & set "sx=%time:~7,1%"
set "xm=%time:~3,1%" & set "mx=%time:~4,1%"
set "so=%xs:0=%%sx%" & set "mo=%xm:0=%%mx%"
echo Offset: %mo% : %so%
:process
:: Calculate Changes
set "xs=%time:~6,1%" & set "sx=%time:~7,1%"
set "xm=%time:~3,1%" & set "mx=%time:~4,1%"
set "xs=%xs:0=%" & set "xm=%xm:0=%"
if %xs%%sx% lss %so% set "xs=60+%xs%"
if %xm%%mx% lss %mo% set "xs=60+%xm%"
set /a "s=%xs%%sx%-%so%"
if %s% equ 0 set /a "m=%xm%%mx%-%mo%"
:: Pause Processing supports millisecond delay but not input checking
::ping 192.0.2.2 -n 1 -w 200 >nul
:: Break Check supports input checking but not millisecond delay
choice /T 1 /C am /D a >nul
if %ErrorLevel% equ 2 goto menu
:display
:: Detect Lag
set "w="
if %s%0 equ %bs%0 goto process
if %s%0 lss %bs%0 set "w=lag detected"
if %s%0 geq %es%0 set "w=lag detected"
:: Format Output
set "mm=00%m%"
set "ss=00%s%"
set "bm=%m%"
set "bs=%s%"
set /a "es=%s%+2"
:: Display
echo Clock: %mm:~-2% : %ss:~-2% %w%
goto process
:menu
echo Menu
endlocal
exit /b 0

注意:这是基于en-US时间格式。

输出示例

Offset: 45 : 10
Clock: 00 : 01 lag detected
Clock: 00 : 02
Clock: 00 : 03
Clock: 00 : 04
Clock: 00 : 05
Clock: 00 : 06
Clock: 00 : 07
Clock: 00 : 08
Clock: 00 : 09
Clock: 00 : 11 lag detected
Clock: 00 : 12
Clock: 00 : 13
Clock: 00 : 14
Clock: 00 : 15
Clock: 00 : 16
Clock: 00 : 17
Clock: 00 : 18
Clock: 00 : 19
Clock: 00 : 20
Clock: 00 : 21
Menu