График работы: через 6 месяцев - PullRequest
0 голосов
/ 04 октября 2010

Я пытаюсь найти способ (из командного файла), который можно использовать для создания запланированного задания, которое будет выполняться через 6 месяцев. Я посмотрел по всей сети, и я буду сталкиваться с AT и SCHTASKS, которые будут планировать задачу ежемесячно ..

Я ищу решение, которое будет выполнять эту задачу каждые 6 месяцев.

Я знаю, что это потребует некоторой манипуляции с датой / временем ... найти месяц (число месяца) и затем добавить к нему 6; как только он проходит «12», он возвращается к 1 и т. д. Затем выстраивает эти числа в соответствие с названием месяцев и использует SCHTASKS или AT для планирования задачи.

Я знаю, как использовать SCHTASKS для планирования задачи из командного файла; Мне просто нужен код, чтобы найти месяц, добавить к нему 6, взять название месяца через 6 месяцев и поместить его в переменную, чтобы я мог разобрать его в SCHTASKS.

Надеюсь, все это имеет смысл. Мой английский не так хорош.

ТИА,

Грег

Ответы [ 5 ]

2 голосов
/ 04 октября 2010

Спасибо всем, кто ответил и предложил свои предложения. Я спал на нем, проснулся от гриппа, и у меня была мозговая волна. Забавно, как все получается. Я знаю, что это излишне, и кто-то предложит лучшее предложение, но все равно все идет ..

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%
0 голосов
/ 05 октября 2010

Поскольку ответ Грега заставил меня плакать, вот такой массив, как синтаксис:

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
0 голосов
/ 04 октября 2010

Вот сумасшедшая идея: если вам нужен этот скрипт на сервере (который не перезагружается), вы можете написать командный файл, который ждет шесть месяцев и затем выполняет данную программу. Чтобы подождать определенное количество секунд, вы можете использовать команду 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

Я не говорю, что это красиво, но я подумал, что это забавная идея. Может быть, немного пищи для размышлений. : -)

0 голосов
/ 04 октября 2010

Вы можете скачать coreutils для 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 для планирования

0 голосов
/ 04 октября 2010

Почему бы не использовать планировщик Windows?

Большая часть необходимой информации включена в эту статью: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx?mfr=true

Вы можете использовать ежемесячную настройку со значением 6, несомненно?

...