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

Batch file 如何将系统时间解析为程序的输入,batch-file,Batch File,报警程序 @echo Off :alarm start music.mp3 cls goto alarm 如何计算/解析系统时间,使其每15分钟或每1小时报警一次?请提供完整的代码。您可以使用此代码获取当前分钟数: %Time:~3,2% 然后,您应该能够构建IF语句,如下所示: IF %Time:~3,2%==00 START music.mp3 唯一的缺点是,这将在整个00分钟内持续发射 你可以这样做: @ECHO OFF SET HasRun=0 :alarm IF %Tim

报警程序

@echo Off
:alarm
start music.mp3

cls
goto alarm

如何计算/解析系统时间,使其每15分钟或每1小时报警一次?请提供完整的代码。

您可以使用此代码获取当前分钟数:

%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标志,以便下一小时,警报可以再次启动


不过,它相当笨重,因为批处理文件将不断地被磨掉。

以下代码将获取时间戳,并将其转换为午夜后的分钟数

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资源工具包(详细信息)或软件包中获取

更新:
如果您真正想要的只是一个任务调度器,那么请使用Windows内置的任务调度器(控制面板->计划任务,详细信息或)或命令行版本(或命令).

您想要Windows的调度程序应用程序,还是想知道如何在DOS中解析系统日期和时间?是的,我也想要调度程序,以便应用程序在后台或系统托盘中运行,并在指定时间发出警报。如果你喜欢,也可以随意投赞成票。问题:Pboth程序现在可以运行了,但是cmd窗口让我很恼火,不管怎样,启动它是最小化的还是拖到系统托盘上的还是不可见的:p避免命令窗口的最简单方法是删除批处理文件,改用Windows内置的任务调度程序。如果需要对任务计划程序进行编程控制,可以使用
schtasks
命令(在命令提示符下或批处理文件中)在任务计划程序中创建、删除、启动、停止、重新调度等任务。@bta:如果需要编程控制,则有一个API。无需使用
schtasks
–也很方便,因为在传统系统上
schtasks
不存在;XP任务调度程序相比之下是可怜的。在上面的代码中,00表示什么,是小时、分钟还是秒00表示分钟,因此您可以执行15、30、45等操作,并处理四分之一的间隔。谢谢,伙计,%Time:~3,2%==00,为什么是3和2,(或请在代码中添加注释)%TIME%返回HH:NN:SS.mm格式~3,2告诉我们从第三个字符开始,读右边的两个字符。如果时间是12:00:01.25,我们会得到“00”。