Вопрос или проблема
У меня есть скрипт, который создает запланированную задачу для запуска через одну минуту с момента создания, используя строку PowerShell (Get-Date).AddMinutes(1).ToString("HH:mm")
.
$Time = (Get-Date).AddMinutes(1).ToString("HH:mm")
schtasks /CREATE /S $env:computername /RU $env:username /SC ONCE /TN "!One_time_task" /TR !Task! /ST $Time
Проблема в том, что мне нужно сделать то же самое, используя CMD, потому что я не могу использовать PowerShell для этой задачи. В данный момент мне приходится явно редактировать строку до нужного времени, я знаю, что time /t
– это текущее время, есть ли способ просто добавить одну минуту легко?
Вы можете использовать %time%
, чтобы получить текущее время. Используйте извлечение строк для часов и минут отдельно. Обработайте переполнение часов и дня.
SETLOCAL ENABLEDELAYEDEXPANSION
rem избегать переполнения часов при чтении %time%
set ttime=%time%
rem текущий час
set ch=%ttime:~0,2%
rem текущая минута
set cm=%ttime:~3,2%
rem следующая минута
set /a nm=!cm!+1
set nh=!ch!
rem переполнение часа?
if !nm! geq 60 (
set /a nm=!nm!-60
rem восстановить ведущий 0
set nm=0!nm!
set /a nh=!nh!+1
)
rem переполнение дня?
if !nh! geq 24 (
rem обернуть к следующему дню как-то
)
echo Текущее время + 1 мин = !nh!:!nm!
Ответ или решение
Для выполнения задачи, связанной с созданием запланированной задачи в Windows с использованием командной строки (CMD) вместо PowerShell, необходимо учесть несколько аспектов. Ваша изначальная цель заключалась в добавлении одной минуты к текущему времени и использовании этого значения для планирования задачи с помощью команды schtasks
. В CMD вы можете получить текущее время с помощью переменной среды %time%
, а затем использовать его для выполнения ваших математических операций.
Вот как можно организовать этот процесс:
Шаг 1: Получение текущего времени
Переменная %time%
возвращает текущее время в формате HH:MM:SS
. Мы будем извлекать часы и минуты из этой строки для дальнейшей обработки.
Шаг 2: Добавление одной минуты
Для этого мы будем использовать условные операторы и математику, чтобы учитывать возможные переполнения минут и часов.
Шаг 3: Создание задачи
Затем вы сможете создать задачу, используя результат вычислений.
Пример кода
Ниже представлен пример кода, который вы можете использовать:
SETLOCAL ENABLEDELAYEDEXPANSION
:: Получаем текущее время
set ttime=%time%
:: Извлекаем часы и минуты
set ch=%ttime:~0,2%
set cm=%ttime:~3,2%
:: Добавляем одну минуту
set /a nm=!cm!+1
set nh=!ch!
:: Обрабатываем переполнение минут
if !nm! geq 60 (
set /a nm=!nm!-60
set /a nh=!nh!+1
)
:: Обрабатываем переполнение часов
if !nh! geq 24 (
set /a nh=!nh!-24
)
:: Форматируем минуты для вывода
if !nm! lss 10 (
set nm=0!nm!
)
:: Форматируем часы для вывода
if !nh! lss 10 (
set nh=0!nh!
)
:: Выводим новое время
echo Текущее время + 1 мин = !nh!:!nm!
:: Создаем задачу с использованием нового времени
schtasks /CREATE /S %computername% /RU "%username%" /SC ONCE /TN "!One_time_task!" /TR "!Task!" /ST !nh!:!nm!
ENDLOCAL
Пояснение кода
-
SETLOCAL ENABLEDELAYEDEXPANSION: Этот оператор активирует расширение переменных в блоках команд. Это позволяет нам использовать переменные, которые изменяются внутри блока (например,
!nm!
и!nh!
). -
Извлечение времени: Мы используем извлечение подстрок для получения текущих часов и минут.
-
Добавление одной минуты: Мы прибавляем одну минуту. Если количество минут становится 60 или более, мы обнуляем минуты и увеличиваем часы на один.
-
Обработка переполнения часов: Если часы становятся 24 или более, мы сбрасываем их до 0.
-
Форматирование времени: Убедитесь, что часы и минуты всегда имеют два знака, добавляя ведущий ноль, если число меньше 10.
-
Создание задачи: Наконец, мы создаем задачу, используя рассчитанное время, подставляя его в команду
schtasks
.
Заключение
Таким образом, вы можете легко добиться своей цели, используя стандартные команды CMD без необходимости в PowerShell. Этот подход позволяет автоматизировать создание задач с необходимым временем выполнения, упрощая управление запланированными заданиями в Windows.