Was ich habe, ist eine Stapeldatei, die ein Wrapper um ein Installationsprogramm ist. Diese Batch-Datei überprüft die vom Installationsprogramm zurückgegebene Fehlerstufe und druckt entsprechend. Mir ist aufgefallen, dass ich bei der Ausführungset ERRORLEVEL=0
In einer Eingabeaufforderung direkt vor dem Start der Batch-Datei (in demselben Befehlsfenster / derselben Umgebung) führt das Installationsprogramm keine Fehler durch, und mein Batch-Skript gibt immer bestanden zurück. Ich gehe davon aus, dass% ERRORLEVEL% eine Variable ist, die von Fenstern definiert wird, die speziell zum Ausdrucken von Fehlern aus Programmen und Skripten verwendet werden, und dass die Verwendung der Variablen in einer Batch-Datei oder etwas anderem auf eigenes Risiko erfolgt, da sie jederzeit geändert werden kann durch einen anderen Prozess. So wie es aussieht, beendet es die Verwendung von errorlevel als Inhaber des Exit-Codes, wenn ich errorlevel in der gegebenen Umgebung setze. Weiß jemand warum das so ist? Für mich ist es einfach seltsames unerwartetes Verhalten. Alle Informationen zu diesem Thema wäre sehr dankbar!
quelle
set "errorlevel="
errorlevel
Variable vom Benutzer / Stapel mit "manuell" eingestellt wurde"set errorlevel=0"
, wird dieerrorlevel
Variable nicht mehr den Exit-Code widerspiegeln, aber Sie können trotzdem mit auf den Exit-Code zugreifenif errorlevel do something
.Sie sollten dynamischen Systemvariablen wie ERRORLEVEL, PATH, CD, DATE, TIME usw. niemals einen eigenen Wert zuweisen. Dadurch wird verhindert, dass Code den dynamischen Wert sieht. Sie können den dynamischen Wert wiederherstellen, indem Sie einfach die Definition des benutzerdefinierten Werts aufheben. Zum Beispiel:
Wenn Sie den Errorlevel auf 0 erzwingen wollen, dann können Sie diese völlig nicht-intuitive, verwenden aber sehr effektiv Syntax:
(call )
. Der Abstand nach dem Anruf ist kritisch. Wenn Sie die Fehlerstufe auf 1 setzen möchten, können Sie verwenden(call)
. Es ist wichtig, dass nach dem Aufruf kein Leerzeichen mehr vorhanden ist.Eine intuitivere, aber weniger bequeme Methode zum Festlegen der Fehlerstufe ist die Verwendung einer dedizierten Unterroutine in einer Batchdatei:
Oder wenn in der Befehlszeile, könnten Sie verwenden
quelle
Ich persönlich benutze das:
cd .
Funktioniert auch in Unix-Shell.
quelle
Dies ist das einzige, was ich gefunden habe, das funktioniert.
call (exit / b 0)
Benötigt in einem Skript, das ein Skript eines Drittanbieters verwendet, das ERRORLEVEL erkennt, die Fehlerstufe jedoch nicht ordnungsgemäß zurücksetzt.
quelle
Hier sind einige andere Möglichkeiten, den
ErrorLevel
Status zurückzusetzen, die sogar in MS-DOS funktionieren (zumindest für Version 6.22):Die folgenden Methoden funktionieren nur in MS-DOS:
Der Vollständigkeit halber wird hiermit der
ErrorLevel
Status1
für Windows und MS-DOS festgelegt:quelle