Batchdatei Log erstellen

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.