task scheduling via Batch-File (Aufgabenplanung)

tomm1984

Lt. Junior Grade
Registriert
Juni 2016
Beiträge
357
Geschätzes Forum.

Gern möchte ich, via Windows Task Scheduling, eine Batch-Datei starten (bspw. tgl. um 00:00) und darin alle weiteren "Aufträge" aufführen, anstatt für jeden "Auftrag" einen eigenen Task anzulegen.

Basis:​

Ich stelle mir das recht simple vor :) :
Code:
00:05 start "path/abc.bat"
00:10 start "xyz.bat"
03:00 start "backup.bat"

Das müsste hiermit ja gut gehen (auch, wenn es gern etwas hübscher sein dürfte 👼)
Wenn ich mich nicht täusche, werden hier einfach alle Dateien ausgeführt, unabhängig deren Rückmeldung oder Fertigstellung.

Ausbaustufe 1:​

Cool wäre, wenn ich bei bestimmten "Aufträgen" in jedem Fall auf deren Rückmeldung / Fertigstellung warte, aber die folgen Einträge auch ausgeführt werden, wenn die tatsächliche Zeit bereits hinter der geplanten Zeit liegt.
Code:
00:05 CALL "path/abc.bat"
00:10 start "xyz.bat"
03:00 start "backup.bat"

... wenn zum Beispiel hier der erste Auftrag (call) 6 Minuten läuft, dann soll im Anschluss (also um 00:11) noch der Auftrag ausgeführt werden, der für 00:10 geplant war (der zweite Auftrag soll jedoch nicht vor 00:10 laufen :D).

Da gibts bestimmt tolle Tools für, aber Windows-Board-Mittel würde ich einfach bevorzugen.

Vielen lieben Dank für Hinweise :)
 
Und im Anschluss soll der Papst dich einladen? Verstehst du überhaupt etwas von Batch-Dateien?
 
  • Gefällt mir
Reaktionen: Marco199 und Darkman.X
Da haste.

Statt hier so viel zu schreiben... ich hab' das innerhalb 30 Sekunden mit einer Google Suche gefunden. So manchmal...
 
Schtasks ist das Kommandozeilentool vom Task Scheduler. Das mußt du jetzt in eine Batchdatei einbauen, so wie du es brauchst. Oder möchtest du, daß dir jemand eine Batch schreibt?
 
JennyCB schrieb:
Und im Anschluss soll der Papst dich einladen?
wäre nicht schlecht, aber ich weiß nicht.
in jedem fall danke für Deinen beitrag ... nen bisl spaß in der vorweihnachtszeit ;)
Ergänzung ()

Frightener schrieb:
Schtasks ist das Kommandozeilentool vom Task Scheduler. Das mußt du jetzt in eine Batchdatei einbauen, so wie du es brauchst. Oder möchtest du, daß dir jemand eine Batch schreibt?
nee, die batches, die ausgeführt werden sollen, habe ich schon. mein o.g. batch soll so etwas wie ein "einfach zu pflegendes" meta-batch werden
 
tomm1984 schrieb:
mein o.g. batch soll so etwas wie ein "einfach zu pflegendes" meta-batch werden
einleuchtend. erhälst du auch, wenn du die Tasks (bspw. via gui) exportierst.
das erlaubt dir deine Meta via gui zu pflegen, statt dich in die Konsolenbefehle einarbeiten zu müssen
 
tomm1984 schrieb:
... wenn zum Beispiel hier der erste Auftrag (call) 6 Minuten läuft, dann soll im Anschluss (also um 00:11) noch der Auftrag ausgeführt werden, der für 00:10 geplant war (der zweite Auftrag soll jedoch nicht vor 00:10 laufen :D).
Ohne mich zu weit aus dem Fenster zu lehnen wird dir das mit Batch-Dateien so nicht gelingen.
Denn Batch-Dateien haben einen klaren linearen Ablauf und können nicht auf Ereignisse reagieren.
 
@JennyCB danke für die rückmeldung. hmm...

bekomme ich das in einer batch zumindest hin, dass die ersten 5 zeichen als uhrzeit interpretiert werden und bis dahin gewartet wird?

ich will von der aufgabenplanungs-GUI ein bisschen weg ... und deshalb auch die batches. die batches werden zentral gepflegt und dann regelmäßig auf die hosts ge-push-t; sicher geht das auch mit task-scheduler, aber ...

im moment wäre mein ansatz auf alles host die ausführung auf bspw. 21:00 zu setzen und dann in den push-batches überall ein unterschiedliches "wait" einzubauen, was dann letztlich bei der jeweilig gewünschten startzeit landet.

mit der lesserlichen uhrzeit wäre es einfach schicker; dann bräuchte die batch vermutlich ne schleife, bis die angegebene uhrzeit (und das heutige datum?) die systemzeit trifft.
 
ich glaube, ich hab schon...

Code:
@echo off
setlocal enabledelayedexpansion

REM Zielzeit im Format HH:MM angeben (z. B. 14:30)
set target_time=14:30

:wait_for_time
REM Aktuelle Uhrzeit abrufen
for /f "tokens=1-2 delims= " %%a in ('time /t') do set current_time=%%a

REM Prüfen, ob die aktuelle Uhrzeit der Zielzeit entspricht
if "%current_time%"=="%target_time%" goto execute_code

REM Warten und erneut prüfen
timeout /t 30 >nul
goto wait_for_time

:execute_code
REM Hier den nachfolgenden Code einfügen
echo Zielzeit erreicht! Weiter mit dem nachfolgenden Code.
REM Beispielcode
pause

...irgendwie so ;)

Danke euch!
 
Zurück
Oben