Logfile mit CMD verarbeitet
Hallo,
ich taste mich gerade an Batch Dateien heran und habe nun folgende Fragestellung, die ich lösen möchte:
1. Ich möchte den CMD einer Aufgabe in einer Log Datei auswerfen
Dafür nutze ich folgendes:
#rem Logfile mit der Aufgabe schreiben
SCHTASKS /query /TN Test >C:\log.txt
Das funktioniert!
Der Inhalt sieht so aus:
Ordner: \
Aufgabenname N„chste Laufzeit Status
====================== ===============
Test 25.05.2014 20:00:00 Bereit
2. Nun möchte ich die Uhrzeit nehmen (20:00:00) und die Minuten um 1 Hochzählen (20:01:00) und dann soll der Task genau mit dieser Uhrzeit aktualisiert werden.
Das bedeutet am nächsten Tag läuft der Task dann mit 20:01:00 und so weiter.
Der Befehl für die Uhrzeit ändern lautet:
SCHTASKS /change /TN Test /ST 20:01:00
Ich möchte aber, dass er 20:01:00 selber aus dem Logfile errechnet!
Ich hoffe, dass mir hier einer helfen kann, denn das ist für mich eine knifflige Aufgabe!
ich taste mich gerade an Batch Dateien heran und habe nun folgende Fragestellung, die ich lösen möchte:
1. Ich möchte den CMD einer Aufgabe in einer Log Datei auswerfen
Dafür nutze ich folgendes:
#rem Logfile mit der Aufgabe schreiben
SCHTASKS /query /TN Test >C:\log.txt
Das funktioniert!
Der Inhalt sieht so aus:
Ordner: \
Aufgabenname N„chste Laufzeit Status
====================== ===============
Test 25.05.2014 20:00:00 Bereit
2. Nun möchte ich die Uhrzeit nehmen (20:00:00) und die Minuten um 1 Hochzählen (20:01:00) und dann soll der Task genau mit dieser Uhrzeit aktualisiert werden.
Das bedeutet am nächsten Tag läuft der Task dann mit 20:01:00 und so weiter.
Der Befehl für die Uhrzeit ändern lautet:
SCHTASKS /change /TN Test /ST 20:01:00
Ich möchte aber, dass er 20:01:00 selber aus dem Logfile errechnet!
Ich hoffe, dass mir hier einer helfen kann, denn das ist für mich eine knifflige Aufgabe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 239119
Url: https://administrator.de/forum/logfile-mit-cmd-verarbeitet-239119.html
Ausgedruckt am: 10.04.2025 um 13:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo Maik007 und willkommen im Forum!
Das Schreiben in eine Datei braucht's eigentlich nicht - es sollte genügen:
Das "
Kurz zum Ablauf:
Die Ausgabe von "
Für Stunde und Minute (mit denen gerechnet werden muss) wird noch eine "1" am Anfang hinzugefügt, sodass für die Uhrzeit "20:00:00" in den Variablen folgende Werte stehen:
in %Std% 120
in %Min% 100
in %Sek% 00
Der Sinn des Verschiebens der Werte in den Bereich ab 100 ist, dass so einerseits die führenden Nullen ("00" anstatt "0") erhalten bleiben und andererseits das "Oktalzahl-Problem" vermieden wird: Werte, die mit "0" beginnen, werden bei Berechnungen als Oktalzahlen interpretiert,, was für "00" bis "07" egal wäre, aber für "08" und "09" zu Fehlen führt, da dies keine gültigen Oktalzahlen wären.
Nach dem Erhöhen des Minutenwertes wird überprüft, ob 160 (also 60 Minuten) erreicht oder überschritten wären; falls ja, wird der Minutenwert um 60 verringert und die Stunde um 1 erhöht. Anschließend wird dann geprüft, ob sich daraus 124 (oder mehr) als Stundenwert ergeben hätte und ggf 24 abgezogen.
Um dann wieder auf die 2-stelligen Werte für Stunde und Minute zu kommen, werden Teilstrings (nur die letzten beiden Zeichen - siehe:
Grüße
bastla
[Edit] "
Das Schreiben in eine Datei braucht's eigentlich nicht - es sollte genügen:
@echo off & setlocal
set "Task=Test"
for /f "tokens=3-5 delims=: " %%a in ('SCHTASKS /query ^|findstr /ibc:"%Task% "') do set "Std=1%%a" & set "Min=1%%b" & set "Sek=%%c"
set /a Min+=1
if %Min% geq 160 (
set Min-=60
set Std+=1
)
if %Std% geq 124 set /a Std-=24
echo SCHTASKS /change /TN Test /ST %Std:~-2%:%Min:~-2%:%Sek%
echo
" am Beginn der Zeile 9 soll ein gefahrloses Testen ermöglichen, da so der Befehl nur angezeigt, aber nicht ausgeführt wird.Kurz zum Ablauf:
Die Ausgabe von "
SCHTASKS
" wird zunächst gefiltert, sodass nur die relevante Zeile weiter bearbeitet wird. Diese Bearbeitung besteht im Zerlegen anhand der Trennzeichen ":" und Leerzeichen. Von den daraus resultierenden Teilen ("Tokens") werden Tokens 3 (Stunde = %%a), Token 4 (Minute = %%b) und Token 5 (Sekunde = %%c) benötigt und daher in Variablen gespeichert.Für Stunde und Minute (mit denen gerechnet werden muss) wird noch eine "1" am Anfang hinzugefügt, sodass für die Uhrzeit "20:00:00" in den Variablen folgende Werte stehen:
in %Std% 120
in %Min% 100
in %Sek% 00
Der Sinn des Verschiebens der Werte in den Bereich ab 100 ist, dass so einerseits die führenden Nullen ("00" anstatt "0") erhalten bleiben und andererseits das "Oktalzahl-Problem" vermieden wird: Werte, die mit "0" beginnen, werden bei Berechnungen als Oktalzahlen interpretiert,, was für "00" bis "07" egal wäre, aber für "08" und "09" zu Fehlen führt, da dies keine gültigen Oktalzahlen wären.
Nach dem Erhöhen des Minutenwertes wird überprüft, ob 160 (also 60 Minuten) erreicht oder überschritten wären; falls ja, wird der Minutenwert um 60 verringert und die Stunde um 1 erhöht. Anschließend wird dann geprüft, ob sich daraus 124 (oder mehr) als Stundenwert ergeben hätte und ggf 24 abgezogen.
Um dann wieder auf die 2-stelligen Werte für Stunde und Minute zu kommen, werden Teilstrings (nur die letzten beiden Zeichen - siehe:
set /?
) der Variablen %Std% und %Min% verwendet, woduch die vorher am Anfang hinzugefügte "1" wieder wegfällt.Grüße
bastla
[Edit] "
SCHTASKS /query
" vereinfacht [/Edit]
Hallo Maik,
Grüße Uwe
Habt ihr eine Idee was ich falsch mache? Vielen Dank schonmal vorab!
du solltest das obige Script in einer Datei speichern und mit der Endung *.bat oder *.cmd versehen und dann ausführen, nicht einfach in das Konsolenfenster einfügen. Wenn du es auf der Konsole Schritt für Schritt eingeben willst, musst du alle doppelten Prozentzeichen(%%) der For-Schleifen-Variablen durch einfache(%) ersetzen.Grüße Uwe