Файл Bat для вызова A.bat, если время меньше 19:45, и для вызова B.bat, если время больше 19:45 - PullRequest
6 голосов
/ 19 апреля 2010

Bat-файл для вызова A.bat, если время меньше 19:45, и для вызова B.bat, если время больше 19:45 (я не могу использовать планировщик задач Windows в этом случае, потому что у меня есть настройка, которая заставляет мой менеджер загрузок запускать этот родительский файл bat каждый раз, когда файл загружается через этот менеджер загрузок)

Ответы [ 4 ]

9 голосов
/ 19 апреля 2010

Вы можете использовать следующий код в качестве базового (вы можете использовать bat файлы, но я предпочитаю cmd в качестве расширения):

@echo off
setlocal enableextensions enabledelayedexpansion
set tm=%time%
:: Test data on lines below.
:: set tm=18:59:59.00
:: set tm=19:00:00.00
:: set tm=19:44:59.00
:: set tm=19:45:00.00
:: set tm=23:59:59.99
set hh=!tm:~0,2!
set mm=!tm:~3,2!
if !hh! lss 19 (
    call a.cmd
    goto :done
)
if !hh! equ 19 (
    if !mm! lss 45 (
        call a.cmd
        goto :done
    )
)
call b.cmd
:done
endlocal

Имейте в виду, что %time% - это тот же формат, который вы получаете из команды time, и это может зависеть от локали. Формат, который я получаю, - 20:17:28.48 около 8:15 вечера, но ваш результат может быть другим.

Если это так, просто настройте подстроки при настройке hh и mm. Команда:

set mm=!tm:~3,2!

устанавливает mm на два символа tm со смещением 3 (где смещение 0 - первый символ).


Если вы не большой поклонник спагетти-кода, даже в пакетном режиме, вы также можете использовать:

@echo off
setlocal enableextensions enabledelayedexpansion
set tm=%time%
:: Test data on lines below.
:: set tm=18:59:59.00
:: set tm=19:00:00.00
:: set tm=19:44:59.00
:: set tm=19:45:00.00
:: set tm=23:59:59.99
set hh=!tm:~0,2!
set mm=!tm:~3,2!
if !hh! lss 19 (
    call a.cmd
) else (
    if !hh! equ 19 if !mm! lss 45 (
        call a.cmd
    ) else (
        call b.cmd
    )
)
endlocal
2 голосов
/ 22 августа 2013

Недавно я делал что-то похожее, и мое решение представляло собой цикл for - не удивительно компактный, но выполняющий свою работу:

for /f "tokens=1,2,3,4 delims=:,. " %%i in ("%time%") do (

echo Timegrab = %%i %%j %%k %%l
set hr=%%i
set mn=%%j
set sc=%%k
set ms=%%l

)

Тогда все, что вам нужно сделать, - это оператор IF, чтобы проверить, было ли% hr% меньше 19 и% mn% меньше 45.

2 голосов
/ 19 апреля 2010

Проверьте здесь команды DATE и TIME .

1 голос
/ 19 апреля 2010

Как насчет использования планировщика задач Windows?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...