这是一个 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
您需要替换%
为!
才能利用延迟扩展。