tags:

views:

203

answers:

3

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)

A: 

How about using Windows Task Scheduler?

AndyC
i can not use windows task sheduler 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
dhiraj05
+2  A: 

Check out the DATE and TIME commands here.

JRL
+4  A: 

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 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 arounf 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 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
paxdiablo
Just curious: is there no 'else' in the Windows batch language?
Adriano Varoli Piazza
Is there no 'or' in the Windows batch language? :)
Adriano Varoli Piazza
@Adriano, it's not the most adaptable of languages but you _can_ do some things: `else` and `and` are shown. I usually emulate `or` with multiple `if`s setting a flag then an `if` based on that flag. Primitive but, if the only tool you have is the jaw of a mammoth, you can't be too fussy :-)
paxdiablo
Thanks for the explanation. I'm just spoiled by the *sh languages.
Adriano Varoli Piazza
Thanks paxdiablo. I was away from my computer i just tried your suggestion. it is working fine, fulfilling my all expectations. I appreciate your prompt response.
dhiraj05
The jaw of the mammoth analogy is a nice one :-)
Joey