Batch nur ausführen wenn in einer definierten Zeit
Hallo,
ich lasse über den Aufgabenplaner von Windows 11 Home zu gewissen Zeiten Programme startet.
Da ab und zu, warum auch immer, der Rechner am Tag neu gestartet hat kam ich auf die Idee diese Programme nach einem solchen ungeplanten Neustart automatisch starten.
Leider bin ich total unwissend im Bereich Batch.
Ich möchte erreichen, dass, wenn die aktuelle Uhrzeit 15 Uhr ist, sollen 4 Programme gestartet werden.
Wenn es allerdings 10 Uhr ist, sollen nur 2 Programme gestartet werden.
Leider funktioniert meine Abfrage nicht.
Es wäre toll, wenn mir jemand sagen kann, wie ich die Abfrage richtig machen muss.
mfg
Peter
ich lasse über den Aufgabenplaner von Windows 11 Home zu gewissen Zeiten Programme startet.
Da ab und zu, warum auch immer, der Rechner am Tag neu gestartet hat kam ich auf die Idee diese Programme nach einem solchen ungeplanten Neustart automatisch starten.
Leider bin ich total unwissend im Bereich Batch.
Ich möchte erreichen, dass, wenn die aktuelle Uhrzeit 15 Uhr ist, sollen 4 Programme gestartet werden.
Wenn es allerdings 10 Uhr ist, sollen nur 2 Programme gestartet werden.
Leider funktioniert meine Abfrage nicht.
@echo off
@for /f "Tokens=1,2,3,4 delims=/. " %%a in ('time/t') do set tim=%%a
echo Zeit ist %tim% Uhr.
if %tim% GTR 8:59 (
if %tim% LEQ 11:00 (
echo "Start Programm1"
echo "Start Programm2"
)
if %tim% GTR 10:59 (
if %tim% LEQ 16:00 (
echo "Start Programm1"
echo "Start Programm2"
echo "Start Programm3"
echo "Start Programm4"
)
)
pause
Es wäre toll, wenn mir jemand sagen kann, wie ich die Abfrage richtig machen muss.
mfg
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3414831923
Url: https://administrator.de/contentid/3414831923
Ausgedruckt am: 25.11.2024 um 09:11 Uhr
9 Kommentare
Neuester Kommentar
Nabend,
vielleicht hilft dir das weiter:
IF kommt nicht mit dem : Doppelpunkt klar, zumindest nicht bei einem Zahlenvergleich.
Ein STRING-Vergleich könnte funktionieren, aber das wäre unnötig bei diesem Code.
Time kann direkt als Variable verwendet werden.
Mit "%time:~0,2%%time:~3,2%" wird nur der Doppelpunkt entfernt und HHMM ausgegeben.
Die Uhrzeit muss dann natürlich auch ohne Doppelpunkt angegeben werden, also die nach dem Operator.
Anstatt zu verschachteln, könntest du auch einen "ELSE IF" verwenden. Dadurch wird es übersichtlicher, auch wenn dein Code nur kurz ist.
Viele Grüße
Ralf
vielleicht hilft dir das weiter:
@ECHO OFF
IF %time:~0,2%%time:~3,2% GTR 1900 (
ECHO Hallo !
)
PAUSE
IF %time:~0,2%%time:~3,2% LEQ 1900 (
ECHO Hallo NEIN !
) ELSE (
ECHO Hallo ELSE!
)
ECHO Ende !
PAUSE
IF kommt nicht mit dem : Doppelpunkt klar, zumindest nicht bei einem Zahlenvergleich.
Ein STRING-Vergleich könnte funktionieren, aber das wäre unnötig bei diesem Code.
Time kann direkt als Variable verwendet werden.
Mit "%time:~0,2%%time:~3,2%" wird nur der Doppelpunkt entfernt und HHMM ausgegeben.
Die Uhrzeit muss dann natürlich auch ohne Doppelpunkt angegeben werden, also die nach dem Operator.
Anstatt zu verschachteln, könntest du auch einen "ELSE IF" verwenden. Dadurch wird es übersichtlicher, auch wenn dein Code nur kurz ist.
Viele Grüße
Ralf
War eingeschlafen. Irgendwie bin ich durch...
Eigentlcih so. "Add....(x)" kann man weglassen. Hier wurden für andere Aktioinen Minuten, Stunden, Tage abgezogen oder addiert - du kannst auch simpel etwas von der aktuelle Zeit abziehen oder drauf tun.
DayOfWeek = Ergibt den englischen Wochentag
ToString('HH') = Stunden im 24-format. 01, 02 03, .....11, 12, 13
if, elseif - am besten online nachschlagen
Das Verknüpfen ist gewöhnngsbedürftig! Wo woanders ein AND, OR reicht will PS immer ein "minus" davor.
if ($day -eq 'Monday' -and $time -eq '04')
Es ist Montag und die aktuelle Uhrzeit hat irgendwas mit 04 im Stundenanteil.
LEQ bei dir in Batch. EQ wäre gleich. Es gibt auch alle anderen Vergleiche. Am besten googleln.
Wo liegt der unterschied?
Es ist moderner.
Du kannst auch 2 Zeiten als Objekte vergleichen. Statt sich mit Strings und substrahieren auseinander zu setzen lässt scih mit einen Ausdruck in PS auch eine Zeit vergleichen.
Du kannst aus einen Objekt auch nochmehr heraus ziehen.
try() Blöcke lassen alles durchlaufen und Fehler werden abgefangen. Ausgeben, ignorieren, etc.
Eigentlcih so. "Add....(x)" kann man weglassen. Hier wurden für andere Aktioinen Minuten, Stunden, Tage abgezogen oder addiert - du kannst auch simpel etwas von der aktuelle Zeit abziehen oder drauf tun.
DayOfWeek = Ergibt den englischen Wochentag
ToString('HH') = Stunden im 24-format. 01, 02 03, .....11, 12, 13
if, elseif - am besten online nachschlagen
Das Verknüpfen ist gewöhnngsbedürftig! Wo woanders ein AND, OR reicht will PS immer ein "minus" davor.
if ($day -eq 'Monday' -and $time -eq '04')
Es ist Montag und die aktuelle Uhrzeit hat irgendwas mit 04 im Stundenanteil.
LEQ bei dir in Batch. EQ wäre gleich. Es gibt auch alle anderen Vergleiche. Am besten googleln.
Wo liegt der unterschied?
Es ist moderner.
Du kannst auch 2 Zeiten als Objekte vergleichen. Statt sich mit Strings und substrahieren auseinander zu setzen lässt scih mit einen Ausdruck in PS auch eine Zeit vergleichen.
Du kannst aus einen Objekt auch nochmehr heraus ziehen.
try() Blöcke lassen alles durchlaufen und Fehler werden abgefangen. Ausgeben, ignorieren, etc.
$day = (Get-Date).AddDays(0).DayOfWeek
$time = (Get-Date).AddHours(0).ToString('HH')
Add-PSSnapin VeeamPSSnapin
$day = (Get-Date).AddDays(0).DayOfWeek
$time = (Get-Date).AddHours(0).ToString('HH')
Function Global:DelTape($tapename)
{
$tape = Get-VBRTapeMedium -Name $tapename
Erase-VBRTapeMedium -Medium $tape -Wait
Eject-VBRTapeMedium -Medium $tape
}
Function MoveToPark() {
Get-VBRTapeMedium -MediaPool "Free" | Where-Object {$_.Name -like "Tape*"} | Foreach-Object {Get-VBRTapeMedium -Name $_.Name | Move-VBRTapeMedium -MediaPool "Park"}
}
if ($day -eq 'Monday' -and $time -eq '04') {
DelTape("Tape 1")
DelTape("Tape 2")
DelTape("Tape 5")
DelTape("Tape 6")
} elseif ($day -eq 'Tuesday' -and $time -eq '04') {
DelTape("Tape 3")
DelTape("Tape 4")
DelTape("Tape 7")
DelTape("Tape 8")
} else {
$day="None"
}