2010-04-19 1 views
6

Bat file per chiamare A.bat se il tempo è inferiore a 19:45 e per chiamare B.bat se il tempo è maggiore di 19:45 (non posso utilizzare l'utilità di pianificazione di Windows in questo caso perché ho un'impostazione che fa sì che il mio download manager attivi questo file bat principale ogni volta che un file viene scaricato tramite questo gestore di download)Bat file per chiamare A.bat se il tempo è inferiore a 19:45 e chiamare B.bat se il tempo è maggiore di 19:45

risposta

1

Come utilizzare l'Utilità di pianificazione di Windows?

+0

in questo caso non posso usare Windows Task Sheduler perché ho un'impostazione che fa sì che il mio download manager attivi questo file bat principale ogni volta che un file viene scaricato attraverso questo gestore di download – dhiraj05

9

È possibile utilizzare il seguente codice come una linea di base (è possibile utilizzare bat file ma io preferisco cmd come estensione):

@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 

Tenete a mente che %time% è lo stesso formato come si ottiene dalla time comando e questo può dipendere dalla locale. Il formato che sto ottenendo è 20:17:28.48 per circa 20:15 ma il tuo risultato potrebbe essere diverso.

Se lo è, è sufficiente regolare le sottostringhe quando si imposta hh e mm. Il comando:

set mm=!tm:~3,2! 

insiemi mm ai due caratteri tm all'offset 3 (dove offset 0 è il primo carattere).


Se non sei un grande fan di spaghetti code, anche in batch, si potrebbe anche usare:

@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

Solo curioso: non c'è nessun 'altro' in Windows linguaggio batch? –

+0

Non c'è nessun 'o' nella lingua batch di Windows? :) –

+2

@Adriano, non è il più adattabile dei linguaggi ma tu puoi fare alcune cose: 'else' e' and' sono mostrati. Di solito emulo 'o' con multipli' if's impostando un flag e poi 'if' in base a quel flag. Primitivo ma, se l'unico strumento che hai è la mascella di un mammut, non puoi essere troppo pignolo :-) – paxdiablo

2

Recentemente stavo facendo qualcosa di simile e la mia soluzione era un ciclo - non incredibilmente compatto, ma ha ottenuto il lavoro fatto:

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 

) 

Poi tutto quello che avrebbe bisogno di fare è un'istruzione IF per verificare se% hr% era inferiore al 19% e mn% era inferiore a 45.