Sie benötigen eine verzögerte Erweiterung, wenn Sie eine Variable verwenden möchten, die Sie in demselben Befehlsblock geändert haben. (Ein Befehlsblock besteht aus einer Reihe von Befehlen in Klammern (
und )
.) Verzögerte Variablen werden mit !var!
anstelle von verwendet %var%
.
Beispiel :
@ECHO OFF SETLOCAL EnableExtensions EnableDelayedExpansion cmd /C exit /B 99 echo before ^(command block^) %%errorlevel%%=%errorlevel% ^^!errorlevel^^!=!errorlevel! ( (call) echo ^(inside command block^) %%errorlevel%%=%errorlevel% ^^!errorlevel^^!=!errorlevel! (call ) echo ^(inside command block^) %%errorlevel%%=%errorlevel% ^^!errorlevel^^!=!errorlevel! ) echo after ^(command block^) %%errorlevel%%=%errorlevel% ^^!errorlevel^^!=!errorlevel!
Ausgabe :
==> D:\bat\SU\1113027.bat before (command block) %errorlevel%=99 !errorlevel!=99 (inside command block) %errorlevel%=99 !errorlevel!=1 (inside command block) %errorlevel%=99 !errorlevel!=0 after (command block) %errorlevel%=0 !errorlevel!=0
Die (call)
und (call )
Tricks, die dieser Dbenham-Antwort auf die Einstellung von ERRORLEVEL auf 0 gestohlen wurde :
Wenn Sie die erzwingen wollen
errorlevel
zu0
, dann können Sie diese völlig nicht-intuitive, verwenden aber sehr effektiv Syntax:(call )
. Der Platz nach dem Anruf ist kritisch. Wenn Sie die einstellen wollen,errorlevel
um1
, können Sie verwenden(call)
. Es ist wichtig, dass nach dem Aufruf kein Platz vorhanden ist.