Вам нужно Delayed Expansion, если вы хотите использовать переменную, которую вы изменили в том же командном блоке. ( Командный блок - это серия команд в скобках (
и )
.) На отложенные переменные ссылаются, используя !var!
вместо %var%
.
Пример :
@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!
Выход :
==> 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
В (call)
и (call )
приемах, похищенные из ответа на этот Dbenham, чтобы установка ERRORLEVEL до 0 вопроса:
Если вы хотите, чтобы заставить
errorlevel
To0
, то вы можете использовать это абсолютно не интуитивный, но очень эффективный синтаксис:(call )
. Пробел после звонка имеет решающее значение. Если вы хотите установитьerrorlevel
To1
, вы можете использовать(call)
. Очень важно, чтобы после звонка не было места.