Win7x64/DOS/CMD-Batch: %errorlevel% kommt "manchmal" richtig raus?

Gast #6688407
hab in einem anderen Post das gleiche Problem gepostet - aber im 
Zusammenhang mit Python - es scheint aber eher schon ein meinen CMD 
Verständnis zu hängen, also hab ich einen gesonderten Post gemacht nur 
auf diesem Thema bezogen

Problem: mein CMD Aufruf verhält sich nur deterministisch so lange ich 
keine anderen Kommandos zwischen drin aufrufe (oder so in der Art)

mini.bat
1
@echo off
2
set neue_var=neuer_wert
3
exit /b 123

als Hausaufgabe formuliert :)

"Ziel ist es das Environment und den ErrorLevel der Batch-Datei zu 
bekommen
ohne diese zu verändern oder eine weitere Batch-Datei drumherum zu 
bauen"

die Aufgabe löse ich mit:
1
mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt

in einem Kontext wird die test Batch-Datei gestartet, ihr errorlevel und 
das zu dem Zeitpunkt bestehende Environment in Dateien geschoben

funktioniert auch alles - nur mein Errorlevel verhält sich manchmal 
komisch

in der Konsole führe ich folgendes aus: (schön mit Cursor-Rauf und 
Enter)
1
1. mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
2
--> in externem Editor sehe ich 123 in errorlevel.txt
3
2. mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
4
--> in externem Editor sehe ich 123 in errorlevel.txt
5
3. type errorlevel.txt
6
--> printet 123 auf die Konsole
7
4. mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
8
--> in externem Editor sehe ich 0 in errorlevel.txt ?????
9
5. mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
10
--> in externem Editor sehe ich wieder 123 in errorlevel.txt

warum ist mein errorlevel plötzlich 0 wenn ich zwischendurch mal type
aufrufe?

das selbe passiert wenn ich den Testablauf in eine eigene Batch-Datei 
stecke

mini_run.bat
1
call mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
2
pause
3
call mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
4
pause
5
type errorlevel.txt
6
pause
7
call mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
8
pause
9
call mini.bat & echo %errorlevel% > errorlevel.txt & set > env.txt
10
pause

kann mir das ein Batch-Guru erklären - oder meinen trivial "Fehler" 
aufzeigen?
Gast #6688416
wenn ich die mini_run.bat so direkt im Explorer Aufrufe und in einem 
Editor die errorlevel.txt verfolge gibt es "manchmal" auch wechsel 
zwischen 0 und 123 - ich verstehe das nicht
#6688844
Vorsicht: "Call" erzeugt einen neuen Befehlsinterpreter, der IIRC das 
Environment des Eltern-Prozesses nicht ändern kann. Das bedeutet auch 
das man das komplette Environment nur in der Batch Datei selbst 
rausextrahieren kann.

Errorlevel ist die Ausnahme, denn da wird einfach nur der Rückkehrcode 
nach Ausführung drin gespeichert.
Gast #6689242
cppbert3 schrieb:
> Erwin D. schrieb:
>
>> Jim M. schrieb:
>>> Errorlevel ist die Ausnahme, denn da wird einfach nur der Rückkehrcode
>>> nach Ausführung drin gespeichert.
>>
>> Errorlevel ist aber was anderes als ExitCode:
>> https://ss64.com/nt/errorlevel.html
>
> das ist klar - und warum bekomme ich, so lange ich nicht "type" Aufrufe
> ,permanten die 123?

Sorry ich hab nicht ordentlich gelesen, super link, erklärt so einige 
komische Verhaltensweisen
Gast #6690813
Aufruf des Skriptes und Auswertung von errorlevel in 2 getrennte Zeilen 
schreiben. Ansonsten wird erst die ganze Zeile interpretiert, also 
%errorlevel% ersetzt durch aktuellen Wert, und dann erst die Zeile 
ausgeführt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.