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
Come utilizzare l'Utilità di pianificazione di Windows?
Controlla qui i comandi DATE and TIME.
È 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
Solo curioso: non c'è nessun 'altro' in Windows linguaggio batch? –
Non c'è nessun 'o' nella lingua batch di Windows? :) –
@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
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.
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