maik007
Goto Top

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!

Content-Key: 239119

Url: https://administrator.de/contentid/239119

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
Solution bastla May 24, 2014, updated at May 25, 2014 at 07:51:53 (UTC)
Goto Top
Hallo Maik007 und willkommen im Forum!

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%
Das "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]
Member: Maik007
Maik007 May 24, 2014 at 20:10:59 (UTC)
Goto Top
Vielen Dank. Das ist wirklich Hammer.
Mit dem Batch kann man richtig viel machen!
Das ist es Danke!
Member: Maik007
Maik007 May 25, 2014 at 08:59:49 (UTC)
Goto Top
Hallo bastla,
das sieht eigentlich von Script sehr gut aus und ist nachvollziehbar. Erstmal vielen Dank für die sehr gute Erklärung. Nun habe ich das Script mal ausprobiert und bekomme nun folgende Meldung:

C:\Users\BOBO>@echo off & setlocal
set "Task=Test"
for /f "tokens=3-5 delims=: " %%a in ('SCHTASKS /query /TN %Task%^|findstr /ibc:
"%Task% "') do set "Std=1%%a" &
"%%a" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

set "Min=1%%b" & set "Sek=%%c"
set /a Min+=1
2if %Min% geq 160 (
Mehr? set Min-=60
Mehr? set Std+=1
Mehr? )
If %Std% geq 124 set /a Std-=24
SCHTASKS /change /TN Test /ST %Std:~-2%:%Min:~-2%:%Sek%
FEHLER: Ungültiger Startzeitwert.
Pause

Die Eintstellungen vom Task sind diese:
test 25.05.2014 20:00:00 Bereit

Liegt das am Windows7 System? Ich wollte das Script unter meinem Windows 7 32 bit Professionell laufen lassen.

Habt ihr eine Idee was ich falsch mache? Vielen Dank schonmal vorab!
Member: colinardo
Solution colinardo May 25, 2014 updated at 15:51:29 (UTC)
Goto Top
Hallo Maik,
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
Member: Maik007
Maik007 May 25, 2014 at 12:34:56 (UTC)
Goto Top
Vielen Dank, dass war es!

Darf ich noch eine blöde Frage stellen?

Wenn ich nun das Script ausführe, kommt nun diese Meldung:

FEHLER: Auf dem lokalen Computer sind Benutzeranmeldeinformationen nicht
zulässig.

System, Benutzer und Passwort mitgegeben.
Haken gesetzt höchste Prio
und UAC ausgeschaltet
Benutzer hat Admin Rechte
Volle Zugriffsrechte auf die Batch Datei

Verstehe nicht, warum die Meldung kommt! Scheint nun die letzte Hürde sein!
Member: Maik007
Maik007 May 25, 2014 at 15:51:18 (UTC)
Goto Top
Hi,
fehler selber gefunden. Habe das nun nur über das System laufen lassen und schon funktioniert es! Also vielen Dank an alle! Ihr habt mir sehr geholfen!