如何将系统时间解析为程序的输入

时间:2010-08-18 15:59:09

标签: batch-file

警报程序

@echo Off
:alarm
start music.mp3

cls
goto alarm

如何获取/解析系统时间,以便每隔15分钟或每1小时开始报警?完整的代码将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用它来获取当前分钟数:

%Time:~3,2%

然后您应该能够构建您的IF语句,如下所示:

IF %Time:~3,2%==00 START music.mp3

唯一的缺点是它会在整个00分钟内持续开火。

你可以这样做:

@ECHO OFF

SET HasRun=0

:alarm

IF %Time:~3,2%==00 (
   IF %HasRun%==0 (
      SET HasRun=1   
      START music.mp3
      PAUSE
   )
)

IF %Time:~3,2%==01 (
   SET HasRun=0   
)

CLS

GOTO alarm

它的要点是当分钟= 00(小时的第一个)时,我们启动MP3,然后让系统知道警报已经运行。一小时后,我们重置HasRun标志,以便下一个小时,警报可以重新开始。

但是,它相当笨重,因为批处理文件将不断磨砺。

答案 1 :(得分:0)

以下代码将采用时间戳并将其转换为午夜后的分钟数。

REM store current timestamp
set now=%TIME:~0,-6%

REM Break time apart into hour and minute
set hour=%now:~0,-3%
set min=%now:~-2%

REM convert hour and minute into minutes
set /a starttime=((%hour% * 60) + %min%)

要执行您要执行的操作,您可以使用上面的代码来获取“开始”时间戳。在结果中添加所需的分钟数(set /a endtime=(%starttime% + %interval%))。现在,创建一个获取当前时间的循环,使用上面的代码将其转换为几分钟,然后将其与%endtime%进行比较。如果两者匹配,则所需的分钟数已经过去。

请注意,如果时间间隔超过午夜(即,如果开始时间是一天结束而结束时间是另一天的开始),则此操作将不会按预期运行。

当然,解决此问题的更简单方法是使用旨在实现此目的的sleep之类的程序。您可以从Windows 2003资源工具包(详细信息here)或GNU Coreutils for Windows包中获取一个。

<强>更新 如果您真正想要的只是一个任务调度程序,那么使用Windows内置的任务计划程序(控制面板 - &gt;计划任务,详细信息herehere)或命令行版本( atschtasks命令。)