2012-10-23 3 views
7

Ich habe gefunden, die Notwendigkeit, eine Fehlerstufe zu einem Programm melden, die Batch-Skripte aufrufen.Batch-Programmierung Einstellung ERRORLEVEL von fehlgeschlagen FIND-Befehl

Das Skript erstellt eine CSV-Protokolldatei, die ich überprüfen möchte, um anzuzeigen, ob das Skript erfolgreich ausgeführt wurde.

Was ich möchte, ist sagen, so etwas wie

IF NOT FIND "[ERR" "test.csv" 

oder zu sagen, dass, wenn die Zeichenfolge "[ERR" nicht in der Ausgabe ist ERRORLEVEL = 0 ELSE ERRORLEVEL = 1

Hoffnung macht den Sinn. Ich bin mir sicher, dass es einfach ist, aber das Setzen von Fehlerpegeln scheint ein königlicher Schmerz in der Welt zu sein!

Antwort

10

FINDEN "[ERR" "text.csv" setzt ERRORLEVEL auf 0, wenn mindestens eine [ERR gefunden wird, und 1 wenn keine [ERR gefunden wird. Sie benötigen eine Möglichkeit, die Logik zu invertieren.

Wenn alles, was Sie tun wollen sofort 0 ist zurück, wenn kein [ERR gefunden, oder 1, wenn mindestens ein [ERR gefunden, dann würde ich folgendes:

find "[ERR" "test.csv" >nul && exit /b 1 || exit /b 0 

Wenn Sie das Ergebnis aufnehmen möchten in später zurückgeschickt werden, eine Variable dann:

find "[ERR" "test.csv" >nul && set "err=1" || set "err=0" 

oder

find "[ERR" "test.csv" >nul 
set /a "err=!%errorlevel%" 

Wenn Sie bereit sind, das Ergebnis

exit /b %err% 

Below zurückzukehren ist meine ursprüngliche Antwort, die angenommen wurde, doch war embarrassingly falsch :-(
Dank Corey für den Logikfehler Hinweis auf . Wie er in seinem Kommentar sagt, wird der fehlerhafte Code unten nur einen Fehler melden, wenn alle Zeilen den [ERR Text haben.

FIND wird den ERRORLEVEL auf 0 setzen, falls gefunden, 1 falls nicht gefunden. Um die Logik um umzukehren, verwenden Sie einfach die Option/V.

find /v "[ERR" "test.csv" >nul 

Wenn Sie eine Variable gesetzt haben, die die Errorlevel gibt an, dann können Sie Verwendung EXIT/B, um den Error-

set err=1 
exit /b %err% 
+0

Hallo dbenham, Vielen Dank für Ihre Antwort, aber leider nur das Hinzufügen/V scheint in der Errorlevel führen immer auf 0 Auch das zweite response.FIND „[ERR“ Ich habe versucht, gesetzt werden mit dieser Batch-Datei "testen test.csv“SET myError = 1 EXIT/B% myError% sollte es immer 1 zurück, wenn ich echo% Errorlevel%, aber es wird dies nur tun, wenn die [ERR nicht in der test.csv Datei ist! Mache ich etwas falsch mit der Syntax? Alle 3 Anweisungen sind in separaten Zeilen, aber ich kann nicht eine neue Zeile starten, um dies zu repräsentieren! Vielen Dank im Voraus für Ihre Antwort! –

+2

dbenham! Nachdem ich das nochmal durchgegangen bin, habe ich festgestellt, dass ich DOS-Schulfehler gemacht habe! Ich setze set err = 1 statt err = 1. Für jeden, der dies liest, bedeutet dies, dass, wenn Sie SET ERR = 1 eingeben, der Variablenname 'ERR' und nicht 'ERR' lautet. Vielen Dank! –

+1

Angabe von '/ v' führt nur zu einem Fehler (Error-== 1), wenn * alle * Zeilen in der Datei den angegebenen Wert enthalten. Es kehrt den Test von * contains x * zu * ohne x * um, wobei ERRORLEVEL 0 ist, wenn Zeilen gefunden werden, die mit dem Test übereinstimmen. – Corey

1

Dies ist die Logik, die ich in einem BAT verwendet haben Datei vorher.

find "string" "test.txt" > NUL & IF ERRORLEVEL 1 (
    ECHO String was NOT found 
) ELSE (
    ECHO String was found 
) 

Sie können beliebige Befehle in die IF/ELSE-Blöcke setzen.

0

Beachten Sie, dass der IF-Befehl die Logik hat, dass er wahr zurückgibt, wenn ERRORLEVEL größer als oder gleich die folgende Nummer ist!So

IF ERRORLEVEL 0 (... 

gibt für alle FIND-Befehle True zurück. Was Sie brauchen, wenn Sie testen wollen, ob ein Satz in einer Datei ist:

find "string" "test.txt" > NUL & IF NOT ERRORLEVEL 1 ECHO String was found 

Hat mich Alter, das zu trainieren!

+0

'' && ist eine Art Abkürzung für 'IF NOT 1 'Errorlevel, so dass Sie Ihre Linie ändern könnte:' find "string" "test.txt"> NUL && echo String wurde gefunden || Echo String wurde nicht gefunden – Stephan

Verwandte Themen