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

Gast #6688407
Lesenswert?

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?
#6688844
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren