Datetime 计划任务:6个月后

Datetime 计划任务:6个月后,datetime,batch-file,scheduling,scheduled-tasks,Datetime,Batch File,Scheduling,Scheduled Tasks,我正在试图找到一种方法(从批处理文件中),我可以使用它创建一个计划任务,该任务将在6个月后执行。我已经浏览了整个网络,我会发现是AT和SCHTASKS每月都会安排任务 我正在寻找一个解决方案,将执行这项任务每6个月 我知道这需要一些时间/日期操作。。查找月份(月数),然后向其添加6;一旦它通过'12',它就会回到1等。。然后将这些数字与月份名称对齐,并使用SCHTASKS或AT计划任务 我知道如何使用SCHTASKS从批处理文件调度任务;我只需要代码来查找月份,向其中添加6个,在6个月的时间内获

我正在试图找到一种方法(从批处理文件中),我可以使用它创建一个计划任务,该任务将在6个月后执行。我已经浏览了整个网络,我会发现是AT和SCHTASKS每月都会安排任务

我正在寻找一个解决方案,将执行这项任务每6个月

我知道这需要一些时间/日期操作。。查找月份(月数),然后向其添加6;一旦它通过'12',它就会回到1等。。然后将这些数字与月份名称对齐,并使用SCHTASKS或AT计划任务

我知道如何使用SCHTASKS从批处理文件调度任务;我只需要代码来查找月份,向其中添加6个,在6个月的时间内获取月份名称,并将其放入变量中,这样我就可以将其解析到任务中

我希望这一切都有意义。 我的英语不是很好

蒂亚


格雷格

为什么不使用Windows调度程序

您需要的大部分信息都包含在本文中:


您可以使用每月设置,值为6?

这里有一个疯狂的想法:如果您想在服务器上使用此脚本(未重新启动),您可以编写一个批处理文件,等待六个月,然后执行给定的程序。要等待特定的秒数,您可能会滥用“ping”命令,如下所示:

ping -n %SECS% localhost > NUL
此命令将有效暂停%SECS%秒,然后返回。要等待六个月,只需等待(365/2)*24*60*60秒

下面是一个实现此想法的小批处理文件:

@echo off
set CMD=echo Half a year elapsed
set /a SECS_IN_HALF_A_YEAR=365 / 2 * 24 * 60 * 60
loop_start:
ping -n %SECS_IN_HALF_A_YEAR% localhost > NUL
%CMD%
goto loop_start
我不是说它漂亮,但我觉得这是个很时髦的主意。也许是一些值得思考的东西。:-)

您可以下载windows版。然后像这样使用
date
命令

C:\test>gnu_date "+%Y%m%d" -d "6 months"
20110404
(它被重命名为
gnu_date.exe

我没有玩过
schtasks
,但根据它使用的日期格式,您可以更改参数以适应
schtasks

C:\test>gnu_date "+%Y-%m-%d" -d "6 months"
2011-04-04
如果你也需要时间的话

C:\test>gnu_date "+%Y-%m-%d-%H:%M:%S" -d "6 months"
2011-04-04-18:12:35

使用
for
循环将日期保存为所需的变量。然后将其传递给
schtasks
进行调度

感谢所有回复并提供建议的人。我睡在它上面,醒来时患了流感,脑电波一片。事情的发展很有趣。我知道这太过分了,有人会提出更好的建议,但不管怎样

REM Grab month number and put into variable
  FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
REM Six months from now
  set /a addmm=%mm% + 6
  if %addmm% gtr 6 (set /a sixmonths=%addmm% - 12)
REM Determine month name
  if %sixmonths%==1 (set monthname=JAN)
  if %sixmonths%==2 (set monthname=FEB)
  if %sixmonths%==3 (set monthname=MAR)
  if %sixmonths%==4 (set monthname=APR)
  if %sixmonths%==5 (set monthname=MAY)
  if %sixmonths%==6 (set monthname=JUN)
  if %sixmonths%==7 (set monthname=JUL)
  if %sixmonths%==8 (set monthname=AUG)
  if %sixmonths%==9 (set monthname=SEP)
  if %sixmonths%==10 (set monthname=OCT)
  if %sixmonths%==11 (set monthname=NOV)
  if %sixmonths%==12 (set monthname=DEC)
REM Schedule Task  
  schtasks /create /TN TuneUpReminder /RU system /TR TuneUpReminder.bat /SC MONTHLY /M %monthname%

因为Greg的回答让我哭了,下面是一些类似数组的语法:

for /F "tokens=%sixmonths%" %%A IN ("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC") DO set monthname=%%A
既然给蝙蝠剥皮的方法总是不止一种

set /a sixmonths=%sixmonths% * 4
set months=666 JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
setlocal ENABLEDELAYEDEXPANSION
set monthname=!months:~%sixmonths%,3!
REM Optional: setlocal DISABLEDELAYEDEXPANSION

我想到的第一件事是,闰年呢?此外,您需要将其添加到机器启动中,并以某种方式检查最后一次运行时(如果停电怎么办?),这是一个很好的观点。。让它更清楚一点。。不必精确到6个月。。但是距离足够近:)所以闰年不是问题:)我是一名IT技术员,基本上使用vbs和批处理脚本来安排一个友好的提醒,让客户每6个月回来调整一次。。所以,在屏幕上弹出一条基本信息和一封友好的电子邮件提醒之间,这是它的经常性收入。。如果没有人有更好的建议,我会记住这一点。谢谢你抽出时间:)我也在考虑ping命令。。但是是的。。这并不是最漂亮的事情:)不管你做什么,不要在客户的机器上运行这样的脚本来安排一个友好的提醒:)我会在outlook中设置一个提醒/预定的电子邮件或类似的东西,并手动联系客户,如果是为了经常性收入(轻松赚钱!),这当然值得个人接触吗?是的。。这就是我反对ping想法的原因:)如果关机,它将不起作用:)因为时间会停止。我更想寻找一种方法,从know获得6个月的时间,将其解析为一个变量,并使用schtasks从命令行安排任务。是的,会有电子邮件发出;甚至社交网站上的私人消息也可能是这样。在Windows计划程序中,我可以选择每月,然后选择我希望使用的月份,所以是的,我可以这样做。。但自动化是关键:)时间是关键。感谢您抽出时间回答DaveNo问题Greg,我/真的/认为这是解决此问题的最佳方法,在我的项目中,我所属的团队完全依靠windows调度程序来控制每天、每周、每月发生的任务-它已经存在了很长时间,您可以100%相信它,虽然我们可以尝试重新发明轮子,但这根本不值得(在我看来!)。另一方面,系统重启/崩溃等不会影响计划。我想我可能错过了为什么这对你不起作用的原因了?我的整个调整都是脚本化的(不管怎么说是软件方面的)。我在这方面花了很长时间,很努力,如果可以的话,我想保持这样。谢谢你的建议。现在有点离题了,但为什么不考虑编写自己的windows服务呢?这是一件非常简单的事情-一个具有逻辑控制计划任务的助手类,一个父线程,它每天睡眠一分钟/小时,并执行一个简单的检查(例如运行),比较DateTime.Now和存储的日期?在c#中做这件事(再次举例)非常简单:)我希望这是值得思考的:)(如果必要,可以提供更多细节——我已经亲自做过好几次了)。这听起来真的很复杂,而且超出了我的深度。我想我现在就睡吧。我可能有一些疯狂的想法,代码会突然出现在我的脑海中=)这些事情以前都发生在我身上。感谢您花时间贡献user141527。这给了我一个想法:)使用date命令,执行for循环;我应该可以把这个月变成一个变量。然后使用“set/a”,我应该能够向变量中添加6(月)。。但如果月变量大于7(月)