Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bat file to call A.bat if time is less than 19:45 and to call B.bat if time is greater than 19:45

Tags:

batch-file

Bat file to call A.bat if time is less than 19:45 and to call B.bat if time is greater than 19:45 (i can not use windows task scheduler in this case because i have setting which makes my download manager to trigger this parent bat file each time a file is downloaded through this download manager)

like image 875
dhiraj05 Avatar asked Apr 19 '10 12:04

dhiraj05


People also ask

What is %% A in batch?

Use double percent signs ( %% ) to carry out the for command within a batch file. Variables are case sensitive, and they must be represented with an alphabetical value such as %a, %b, or %c. ( <set> ) Required. Specifies one or more files, directories, or text strings, or a range of values on which to run the command.


2 Answers

You can use the following code as a baseline (you can use bat files but I prefer cmd as an extension):

@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

Keep in mind that %time% is the same format as you get from the time command and this may depend on locale. The format I'm getting is 20:17:28.48 for around 8:15pm but your result may be different.

If it is, just adjust the substrings when setting hh and mm. The command:

set mm=!tm:~3,2!

sets mm to the two characters of tm at offset 3 (where offset 0 is the first character).


If you're not a big fan of spaghetti code, even in batch, you could also use:

@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
like image 131
paxdiablo Avatar answered Nov 09 '22 09:11

paxdiablo


Check out the DATE and TIME commands here.

like image 43
JRL Avatar answered Nov 09 '22 10:11

JRL