我认为您的问题是因为您在for循环中读取了%ERROR_LEVEL%。
我认为你必须使用
setlocal EnableDelayedExpansion
EnableDelayedExpansion:在执行时而不是在解析时扩展变量。
(参考在这里)
尝试做这样的事情:
setlocal EnableDelayedExpansionfor %%t in (target1 target2 target3) do ( ant -f build.xml build -DPARAM_TARGET=%%t echo ELVL: !ERRORLEVEL! IF NOT !ERRORLEVEL! == 0 ( echo ABORT: !ERRORLEVEL! exit /b !ERRORLEVEL! ) ELSE ( echo PROCEED: !ERRORLEVEL! ))
它没有解释为什么它要在您的计算机上运行…也许是因为您的dos窗口中已经设置了EnableDelayedExpansion。
编辑
在批处理文件中:
%var%
将在解析代码时(即在执行之前!)进行扩展!var!
执行代码时将展开
由于您处于循环中,因此:将
%ERROR_LEVEL%被扩展一次(即在第一次执行之前)。但是您需要的是
ERROR_LEVEL针对每次迭代重新展开,这就是
!ERROR_LEVEL!语法的目的。



