Skip to content

Instantly share code, notes, and snippets.

@Befzz
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Befzz/4ff6c84d5424f0d085ec to your computer and use it in GitHub Desktop.
Save Befzz/4ff6c84d5424f0d085ec to your computer and use it in GitHub Desktop.
Window 7+ SCHTASKS example. BATCH
@ECHO OFF
REM Отключаем эхо
REM включаем поддержку !имя! чтобы получать не старые значения переменных
Setlocal EnableDelayedExpansion
REM название задачи
SET task_name=my_own_task
REM проверяем первый аргумент
IF "%1"=="" (
CALL :TASK_SETUP
CALL :TASK_DELETE
CALL :TASK_CREATE
GOTO :THE_END
)
IF "%1"=="del" (
CALL :TASK_DELETE
GOTO :THE_END
)
IF "%1"=="run" (
CALL :TASK_RUN
EXIT /B
)
:TASK_SETUP
REM создаём .cmd для управления
REM и скрипты
REM Удаляем stime
SET stime=
IF NOT EXIST echo.js (
ECHO WScript.Echo^("WScript says ECHO!"^) > echo.js
)
IF NOT EXIST task_delete.cmd (
ECHO @task_setup.cmd del > task_delete.cmd
)
IF NOT EXIST task_run.cmd (
ECHO @task_setup.cmd run > task_run.cmd
)
REM Изменение задачи просит пароль :( поэтому будем удалять и создавать задачу каждый раз
REM SCHTASKS /CHANGE /TN "my_own_task" /ST %stime%
REM запрос времени
SET /P stime=Input time: HH mm^|HHmm:
REM если время не введено, то поставим на 1 минуту вперёд
IF "!stime!"=="" (
REM Получаем дату и время в виде YYYYMMDDHHmmSS. (20150620002931.195000+180 )
FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a
REM получаем минуты и секунды в 24 формате. (отрезаем от предыдущего)
SET hours=!DTS:~8,2!
SET minutes=!DTS:~10,2!
REM если минуты меньше чем 59, то прибавляем 1
REM иначе прибавляем 1 к часу а минуты в нули
REM тут еще проблемы с тем что 09 не воспринимается как 9 в SET /A (математическое вычисление)
IF !minutes! LSS 59 (
IF !minutes! LSS 10 (
SET /A minutes=!minutes:~-1! + 1
) ELSE (
SET /A minutes=!minutes! + 1
)
) else (
SET minutes=00
IF !hours! LSS 10 (
SET /A hours=!hours:~-1! + 1
) ELSE (
SET /A hours=!hours! + 1
)
SET /A hours=!hours!+1
)
REM 0 впереди добавляем а потом берём последние два символа 1 -> 01 -> 01 12 -> 012 -> 12
SET minutes=0!minutes!
SET hours=0!hours!
SET stime=!hours:~-2!:!minutes:~-2!
) ELSE (
REM Иначе используем введенное
REM заменяем пробел на двоеточие
IF "!stime:~-4!"=="!stime:~-5!" (
SET stime=!stime:~0,2!:!stime:~2,2!
) ELSE (
SET stime=!stime:~0,2!:!stime:~3,2!
)
)
ECHO Time set: !stime!
ECHO.
GOTO :eof
:TASK_RUN
SCHTASKS /RUN /TN "%task_name%"
GOTO :eof
REM Удаляем задачу. Пытаемся.
:TASK_DELETE
ECHO Trying to delete task "%task_name%".
SCHTASKS /DELETE /TN "%task_name%" /F
ECHO.
GOTO :eof
REM Создаем новую
:TASK_CREATE
ECHO Creating task: "%~dp0echo.cmd" with stime !stime!
ECHO START wscript %~dp0echo.js > echo.cmd
SCHTASKS /CREATE /TN "%task_name%" /TR "%~dp0echo.cmd" /SC ONCE /ST !stime!
ECHO.
GOTO :eof
:THE_END
PAUSE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment