Batchdatei Log erstellen
Ich habe eine Batchdatei die eine beispiel.exe ausführt. Ich möchte nun das das starten und das auschalten dieser exe in einem Log dokumentiert wird damit ich bei abstürzen das nachprüfen kann.
Kann mir da wer weiter helfen ?
3 Antworten
Falls es Dir nur darum geht, vor dem Starten und nach Beenden eines Programms eine Protokollzeile zu schreiben:
echo start beispiel.exe %date% - %time% 1>>logdatei.log
beispiel.exe
echo stop beispiel.exe %date% - %time% 1>>logdatei.log
Diese Zeilen habe ich frech von Sirius geklaut; beschwer' Dich also bei ihm, wenn's nicht geht :)
Du brauchst natürlich Schreibrechte auf die Protokolldatei. Und gib besser einen absoluten Pfad an (z.B. %appdata% oder %home%?), weil beispiel.exe das Arbeitsverzeichnis ändern kann.
Du kannst Dich natürlich den 100.000 Leuten anschließen, die ständig das Rad neu erfinden und eine weitere Batch basteln, die die erste Batch überwacht.
Oder aber Du nimmst die Funktion von Windows, die es schon seit Windows NT Zeiten für genau diese Zwecke gibt --> Das Ereignisprotokoll.
Das Überwachen von Start und Stopps von Prozessen kannst Du mit dem Gruppenrichtlinieneditor (gpedit.msc) einschalten.
Die Events landen im Ereignisprotokoll unter Sicherheit.
Du kannst prüfen lassen, ob der Prozess existiert, und bei jeder Änderungen etwas in die Logdatei schreiben:
@echo off
Setlocal EnableDelayedExpansion
start Beispiel.exe
set Switch=On
:Loop
tasklist /NH | findstr /C:"Beispiel.exe" >nul 2>nul && (
if "!Switch!" == "Off" echo Start Beispiel.exe %date% - %time% 1>>Logdatei.log
set Switch=On
) || (
if "!Switch!" == "on" echo Stop Beispiel.exe %date% - %time% 1>>Logdatei.log
set Switch=Off
)
ping localhost -n 6 >nul
goto Loop
Der SETLOCAL-Befehl erlaubt das Verwenden von Variablen innerhalb von Klammern durch Ausrufezeichen ("!Variable!" statt "%Variable%").
Mit dem START-Befehl startest du deine Exe-Datei.
Die Variable "Switch" dient dazu zu erkennen, ob der Prozess neu gestartet bzw. neu beendet wurde.
Die Sprungmarke ":Loop" und der GOTO-Befehl erstellen eine Endlosschleife.
Mit dem TASKLIST-Befehl zeigst du alle aktuell laufenden Prozesse an. "/NH" verbirgt dabei lediglich die Überschriften, die ausgegeben werden würden. Durch das Verknüpfungszeichen " | " bezieht sich der FINDSTR-Befehl auf TASKLIST.
Der FINDSTR-Befehl prüft, ob "Beispiel.exe" läuft. Jegliche Ausgaben des FINDSTR-Befehls werden mit ">nul" (normale Ausgaben) und "2>nul" (Fehlerausgaben) unterdrückt.
Mit "&&" wird die folgende Befehlskette - hier der erste IF- mit dem SET-Befehl - nur ausgeführt, wenn FINDSTR erfolgreich war. Das bedeutet, falls der Prozess läuft, wird geprüft, ob "Switch" auf "Off" steht, sprich ob der Prozess neu gestartet wurde. Falls ja, schreibt der ECHO-Befehl einen Eintrag in die Logdatei. "Switch" wird dann auf "On" gesetzt.
Mit " || " wird die folgende Befehlskette nur ausgeführt, wenn FINDSTR erfolglos war. Läuft der Prozess also nicht, obwohl "Switch" noch auf "On" steht, wurde er kürzlich beendet. ECHO schreibt einen Eintrag in die Logdatei.
Der PING-Befehl macht eine 5-sekündige Pause. Das dient dazu, CPU-Kapazität zu sparen.