Datei auslesen mit If-Bedingung

CED999

Lieutenant
Dabei seit
Juni 2011
Beiträge
852
Hi Leute,

Sprache: batch
Hintergrund: Ein routine-job enthält die Anweisung sfc /scannow mit der die Windows-Systeminstallation auf korrupte Dateien überprüft wird. sfc gibt nun leider immer als errorlevel 0 zurück auch wenn korrupte Dateien gefunden wurden. Aus sicht von Windows ist der Befehl ja ohne Fehler ausgeführt worden. Mich interessiert aber ob Fehler gefunden wurden

Ziel: Ich möchte nun eine If-Bedingung finden, die überprüft, ob SFC einen Fehler gefunden hat dann ein bestimmtes Kommando ausführen. Mein Problem ist es dieses If-Statement zu finden/formulieren. Ich weiß nicht wie ich das mache/schreibe.

Wie weit ich gekommen bin: Wenn sfc einen Fehler findet, schreibt es in die Datei CBS einen Eintrag mit dem Feld [SR] = System Repair. Mittels findstring habe ich den nach dieser speziellen Art von Eintrag gefiltert und ihn (den Eintrag falls einer gefunden wird) in eine neue Datei schreiben lassen. Das sieht dann so aus:

Code:
findstr /c:"[SR] Repairing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfc.txt"
Was ich jetzt nicht hinkriege ist folgendes. Falls ein Eintrag gefunden wird triggere eine weitere Aktion.

Wer kann mir helfen?
 

CED999

Lieutenant
Ersteller dieses Themas
Dabei seit
Juni 2011
Beiträge
852
Das ist doch von der Logik ganz falsch.

if NOT ERRORLEVEL 1 echo "triggere eine weitere Aktion"
Code:
if NOT ERRORLEVEL 1.....
überprüft ob die Variable %errorlevel% KLEINER als 1 ist. 0 also kein Fehler löst dann ja den Trigger aus.

Wie ich aber schon schrieb SFC verändert den Errorlevel LEIDER NICHT er wird immer mit 0 angegeben - ich brauche also einen Workaround
 

r0b0t

Ensign
Dabei seit
Juni 2010
Beiträge
199
Der Befehl findstr setzt den errorlevel auf 1, wenn der gesuchte String nicht gefunden wird. Errorlevel wird auf 0 gesetzt, wenn der gesuchte String gefunden wird. Also sollte

findstr /c:"[SR] Repairing corrupted file" %windir%\Logs\CBS\CBS.log
if NOT ERRORLEVEL 1 echo "triggere eine weitere Aktion"

dein Problem lösen. echo "triggere eine weitere Aktion" musst du noch durch deine eigenen Befehle ersetzen.
 

CED999

Lieutenant
Ersteller dieses Themas
Dabei seit
Juni 2011
Beiträge
852
Danken Dir . Das findstr selbst einen errorlevel ausgibt hätte ich mir nicht gedacht. Das ist einfach :daumen:
 
Top