2010-04-19 9 views
6

Plik z batem, aby zadzwonić do A.bat, jeśli czas jest mniejszy niż 19:45 i zadzwonić B.bat, jeśli czas jest większy niż 19:45 (nie mogę w tym przypadku używać programu do planowania zadań systemu Windows, ponieważ mam ustawienie, które powoduje, że mój menedżer pobierania uruchamia ten plik z plikiem macierzystym za każdym razem, gdy plik jest pobierany za pośrednictwem tego menedżera pobierania)Plik bat, aby zadzwonić do A.bat, jeśli czas jest mniejszy niż 19:45 i zadzwonić do B.bat, jeśli czas jest większy niż 19:45,

Odpowiedz

1

Co powiesz na korzystanie z Harmonogramu zadań systemu Windows?

+0

Nie mogę używać programu windows task sheduler w tym przypadku, ponieważ mam ustawienie, które powoduje, że mój menedżer pobierania uruchamia ten plik rodzica nietoperza za każdym razem, gdy plik jest pobierany przez tego menedżera pobierania. – dhiraj05

9

Można użyć następującego kodu jako punkt odniesienia (można użyć bat pliki ale wolę cmd jako rozszerzenie):

@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 

Należy pamiętać, że %time% jest ten sam format, jak dostać się z time polecenie i może zależeć od ustawień regionalnych. Format, który otrzymuję, to 20:17:28.48 na około 20:15, ale Twój wynik może być inny.

Jeśli tak, dostosuj podciągi, ustawiając hh i mm. Polecenie:

set mm=!tm:~3,2! 

zestawy mm do dwóch znaków tm na przesunięcie 3 (gdzie 0 oznacza przesunięcie pierwszy znak).


Jeśli nie jesteś wielkim fanem kodu spaghetti, nawet w partii, można również użyć:

@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

Po prostu ciekawy: czy w Windowsie nie ma "innego" język wsadowy? –

+0

Czy nie ma "lub" w języku wsadowym Windows? :) –

+2

@Adriano, nie jest to najbardziej przystosowany język, ale możesz zrobić kilka rzeczy: pokazano "else" i "and". Zazwyczaj emuluję 'lub' z wieloma' if's ustawiającymi flagę, a następnie 'if' na podstawie tej flagi. Prymitywny, ale jeśli jedynym narzędziem, jakie masz, jest szczęka mamuta, nie możesz być zbyt wybredny :-) – paxdiablo

2

Byłem niedawno robi coś podobnego i moje rozwiązanie było dla pętli - nie niezwykle zwarty, ale swoją robotę:

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 

) 

Wtedy wszystko będzie trzeba zrobić to instrukcja if, aby sprawdzić, czy% h% była mniejsza niż 19% i mn% była mniejsza niż 45.

Powiązane problemy