Windows 批处理脚本中括号内的错误级别错误

Windows 批处理脚本中括号内的错误级别错误

这是一个 Windows .bat 文件:

@echo off

call :label
echo %errorlevel%
pause >nul
exit

:label
exit /b 1

按预期工作并输出1

但将代码改为:

@echo off

if 1==1 (
    call :label
    echo %errorlevel%
    )
pause >nul
exit

:label
exit /b 1

输出是0而不是1

只是if 1==1为了显示结果,但我需要在实际脚本中使用另一个 if 语句。为什么会发生这种情况,解决方案是什么?如果延迟扩展是解决方案,如何使用它?

答案1

如果延迟扩展是解决方案,那么如何使用它?

如下:

@echo off
setlocal enabledelayedexpansion
if 1==1 (
    call :label
    echo !errorlevel!
    )
pause >nul
endlocal
exit
:label
exit /b 1

延迟扩展将导致批处理文件中的变量在执行时而不是在解析时扩展,此选项通过命令打开SETLOCAL EnableDelayedExpansion

来源: -EnableDelayedExpansion - Windows CMD - SS64.com

您需要替换%!才能利用延迟扩展。


进一步阅读

相关内容