我正在尝试找到一种方法(来自批处理文件),我可以用它来创建一个从现在起6个月后执行的计划任务。我看了整个网络,我会遇到的是AT和SCHTASKS将按月安排任务。
我正在寻找一个每6个月执行一次此任务的解决方案。
我知道这需要一些时间/日期操作..找到月份(月份)然后再加6;一旦它通过'12',它就会回到1等。然后用月份名称排列这些数字,并使用SCHTASKS或AT来安排任务。
我知道如何使用SCHTASKS从批处理文件中安排任务;我只需要代码来查找月份,添加6,在6个月的时间内获取月份名称,然后将其放入变量中,以便将其解析为SCHTASKS。
我希望这一切都有道理。 我的英语不太好。
TIA,
格雷格
答案 0 :(得分:2)
感谢所有回复的人,并提出了建议。我睡着了,醒来时感冒了,还有脑电波。有趣的事情是如何运作的。我知道这是矫枉过正,有人会提出一个更好的建议,但无论如何都要进行..
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%
答案 1 :(得分:0)
为什么不使用Windows Scheduler?
您需要的大部分信息都包含在本文中:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx?mfr=true
您可以使用月度设置,值为6吗?
答案 2 :(得分:0)
这是一个疯狂的想法:如果你想在服务器上使用这个脚本(没有重新启动),你可以写一个等待六个月然后执行给定程序的批处理文件。要等待特定的秒数,您可能会滥用'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
我不是说它很漂亮,但我认为这是一个时髦的想法。也许有些值得深思。 : - )
答案 3 :(得分:0)
您可以为Windows下载coreutils。然后像这样使用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
以进行安排
答案 4 :(得分:0)
由于Greg的回答让我内心哭泣,这里有一些类似语法的数组:
for /F "tokens=%sixmonths%" %%A IN ("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC") DO set monthname=%%A
因为总是有不止一种方法来蝙蝠[ch]?
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