2010-04-19 7 views
6

Bat-Datei zum Aufrufen von A.bat, wenn die Zeit weniger als 19:45 Uhr ist und angerufen wird B.bat, wenn die Zeit größer als 19:45 ist (ich kann in diesem Fall Windows Task Scheduler nicht verwenden, weil ich Einstellungen habe, die meinen Download Manager veranlassen, diese Eltern Bat Datei jedes Mal zu starten, wenn eine Datei über diesen Download Manager heruntergeladen wird)Bat-Datei zum Anrufen von A.bat, wenn die Zeit weniger als 19:45 Uhr ist, und zum Anrufen von B.bat, wenn die Zeit größer als 19:45 ist

Antwort

1

Wie wäre es mit Windows Taskplaner?

+0

Ich kann Windows Task Sheduler in diesem Fall nicht verwenden, weil ich Einstellungen habe, die meinen Download-Manager dazu veranlasst, diese Eltern Bat-Datei jedes Mal zu starten, wenn eine Datei über diesen Download-Manager heruntergeladen wird – dhiraj05

9

Sie können den folgenden Code als Grundlage verwenden (Sie bat Dateien verwenden können, aber ich ziehe es cmd als Erweiterung):

@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 

Beachten Sie, dass %time% das gleiche Format wie Sie aus dem time erhalten Befehl und dies kann von Gebietsschema abhängen. Das Format, das ich bekomme, ist 20:17:28.48 für etwa 20.15 Uhr, aber Ihr Ergebnis kann anders sein.

Wenn dies der Fall ist, passen Sie die Teilstrings einfach an, wenn Sie hh und mm einstellen. Der Befehl:

set mm=!tm:~3,2! 

Sätze mm die beiden Zeichen tm bei 3 versetzt (wobei 0 Versatz ist das erste Zeichen).


Wenn Sie nicht ein großer Fan von Spaghetti-Code sind, auch im Batch, können Sie auch verwenden:

@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

Nur neugierig: gibt es kein 'sonst' in Windows Batch-Sprache? –

+0

Gibt es in der Windows-Stapelsprache kein 'oder'? :) –

+2

@Adriano, es ist nicht die anpassungsfähigste Sprache, aber Sie können einige Dinge tun: 'else' und' and' werden angezeigt. Normalerweise emuliere ich 'oder' mit mehreren' if's setzt ein Flag und dann ein 'if' basierend auf diesem Flag. Primitiv, aber, wenn das einzige Werkzeug, das Sie haben, der Kiefer eines Mammuts ist, können Sie nicht zu pingelig sein :-) – paxdiablo

2

ich kürzlich etwas zu tun, war ähnlich und meine Lösung ein for-Schleife war - nicht erstaunlich kompakt, aber bekam den Job zu erledigen:

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 

) 

Dann alles, was Sie tun müssen, wäre eine IF-Anweisung zu prüfen, ob% hr% betrug weniger als 19 und Mio.%% weniger als 45.

Verwandte Themen