我有一个批处理文件,需要在32位上下文中运行,因此包含一些代码来调用32位命令处理器并使用其自己的路径。此脚本还需要能够在失败时返回错误代码,它通过exit /b 123
实现。然而...
当exit
在(
)
块中,并且包含任何语句时,这不会被正确地返回。
@echo off
setlocal EnableDelayedExpansion
rem Ensure we're running in 32-bit mode
if not %PROCESSOR_ARCHITECTURE%==x86 (
echo Thunking to 32-bit mode
%Windir%\SysWOW64\cmd.exe /c %0
echo !ERRORLEVEL!
exit /b !ERRORLEVEL!
)
(
echo before
exit /b 456
echo after
)
输出结果如下:
H:\>sub.bat
Thunking to 32-bit mode
before
0
H:\>
如果在
exit
后面删除 echo
,那么它将按预期正常工作。H:\>sub.bat
Thunking to 32-bit mode
before
456
H:\>
即使你用
rem
或其他命令替换echo
,它仍然失败。如果你手动运行32位的cmd.exe
并运行相同的脚本,则退出代码会被正确设置。H:\>sub.bat
before
H:\>echo %ERRORLEVEL%
456
H:\>
有人能解释并提供这个问题的解决办法吗?