2010-04-19 3 views
6

Bat fichier à appeler A.bat si l'heure est inférieure à 19h45 et d'appeler B.bat si le temps est supérieur à 19:45 (je ne peux pas utiliser le planificateur de tâches Windows dans ce cas car j'ai un réglage qui fait que mon gestionnaire de téléchargement déclenche ce fichier chauve-souris chaque fois qu'un fichier est téléchargé via ce gestionnaire de téléchargement)Bat fichier à appeler A.bat si l'heure est inférieure à 19h45 et d'appeler B.bat si l'heure est supérieure à 19h45

Répondre

1

Comment utiliser Windows Task Scheduler?

+0

Je ne peux pas utiliser Windows task sheduler dans ce cas parce que j'ai un réglage qui fait que mon gestionnaire de téléchargement déclenche ce fichier chauve-souris chaque fois qu'un fichier est téléchargé via ce gestionnaire de téléchargement – dhiraj05

9

Vous pouvez utiliser le code suivant comme base de référence (vous pouvez utiliser bat fichiers mais je préfère cmd comme une 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 

Gardez à l'esprit que %time% est le même format que vous obtenez de l'time commande et cela peut dépendre des paramètres régionaux. Le format que j'obtiens est 20:17:28.48 pour environ 20h15 mais votre résultat peut être différent.

Si c'est le cas, il suffit d'ajuster les sous-chaînes lors du réglage hh et mm. La commande:

set mm=!tm:~3,2! 

ensembles mm aux deux caractères de tm à l'offset 3 (où 0 décalage est le premier caractère).


Si vous n'êtes pas un grand fan de code spaghetti, même en lots, vous pouvez également utiliser:

@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 
+0

Juste curieux: il n'y a pas d'autre dans Windows langue de lot? –

+0

N'y a-t-il pas un 'ou' dans la langue par lots de Windows? :) –

+2

@Adriano, ce n'est pas le plus adaptable des langages mais vous pouvez faire quelques choses: 'else' et' and' sont affichés. J'émule habituellement 'or' avec plusieurs' if's qui définissent un drapeau puis un 'if' basé sur ce drapeau. Primitif mais, si le seul outil que vous avez est la mâchoire d'un mammouth, vous ne pouvez pas être trop tatillon :-) – paxdiablo

2

J'ai été récemment en train de faire quelque chose de similaire et ma solution était une boucle - non étonnamment compact, mais fait le travail:

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 

) 

Ensuite, tout ce que vous devez faire est une instruction IF pour vérifier si%% hr était inférieure à 19% et mn% était inférieure à 45

Questions connexes