Last active
August 29, 2015 14:23
-
-
Save Befzz/4ff6c84d5424f0d085ec to your computer and use it in GitHub Desktop.
Window 7+ SCHTASKS example. BATCH
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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