如何在指定的date/时间运行bat文件?

我有一个蝙蝠文件,我想在特定的一天/每个季度运行一年。 我是新来的命令行,我知道如何通过任务调度器来运行它,这非常简单。

比方说,对于每个季度,第一个月和第二个月,我的蝙蝠文件应该在其他几个星期运行。 一个季度的第三个月,它应该每周运行一次。 可能的时间是凌晨6:00,我该怎么办? 请告诉我。 谢谢。

Solutions Collecting From Web of "如何在指定的date/时间运行bat文件?"

有Windows调度程序 ,但我怀疑你将能够做一个只有Windows调度程序的进度计划。

我要做的是用某种高级语言(C#,JAVA等)编写调度逻辑(例如,当你想要批处理文件运行时),然后在批处理文件的开头调用该程序,看看它是否是你关心的日期。

批处理文件可以设置为使用Windows调度程序每天运行(或者如果需要,每天多次运行),但是如果您的C#/ JAVA程序显示它是您关心的日期,那么它只会执行“真正的东西” 。

下面的批处理文件做你想要的:

@echo off rem Get the "monthInQuarter@weekInMonth" value of the last run: set /P lastRun=< scheduler.txt rem Get values from today date for /F "tokens=1,2 delims=/" %%a in ("%date%") do ( set /A "monthInQuarter=(1%%a-100)%%4, weekInMonth=(1%%b-101)/7+1, oddWeekInMonth=weekInMonth%%2" ) if %weekInMonth% gtr 4 ( set /A weekInMonth=4, oddWeekInMonth=0 ) set thisRun=%monthInQuarter%@%weekInMonth% rem For 1st and 2nd month in each quarter: if %monthInQuarter% leq 2 ( rem For alternative weeks (1=yes, 2=no, 3=yes, 4=no): if %oddWeekInMonth% equ 1 ( if "%thisRun%" neq "%lastRun%" ( echo %thisRun%> scheduler.txt call :TheProcess ) ) rem For the third month of a quarter: ) else if %monthInQuarter% equ 3 ( rem Run it weekly: if "%thisRun%" neq "%lastRun%" ( echo %thisRun%> scheduler.txt call :TheProcess ) ) exit :TheProcess rem Place here the desired process, ie: echo This run only on selected weeks! exit /B 

这个值表可能有助于理解调度逻辑:

 month: 1 2 3 4 5 6 7 8 9 10 11 12 monthInQuarter: 1 2 3 0 1 2 3 0 1 2 3 0 day: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... weekInMonth: 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 ... oddWeekInMonth: 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 ... 

笔记:

  • 这个批处理文件假设ECHO%DATE%命令以月/日/年的形式显示日期,如果月份或日期小于10,则以MM / DD / YYYY格式显示为零。如果这不是您的语言环境日期格式,则需要稍作修改。

  • 虽然可以修改这个程序来处理任何日期格式,但我认为这不是一个通用的文件,而是一个非常特殊的需求。

  • 这个程序必须每天早上六点通过任务调度程序运行。

  • 程序第一次运行“系统找不到指定的文件”。 消息出现,然后创建辅助SCHEDULE.TXT文件。

我希望它有帮助。

安东尼奥

PS – 我不认为这个问题可以通过更简单的方式通过vbs脚本或C#,JAVA等解决…