所以我对批次的ERRORLEVEL确实有问题。它只是不适合我。 我有一个很大的自己的ms构建批处理脚本,我总是从ERRORLEVEL返回0,无论我做什么(例如msbuild,tf get,tf checkout,copy,xcopy,...)
所以我做了一个小例子在这里发布:
@echo off
set Update=1
IF %Update% == 1 (
echo.
set /p "=- Copy stuff..." <NUL
xcopy /R /Y C:\test\2.lib C:\test1
if %ERRORLEVEL% neq 0 (echo FAILED!) ELSE (echo SUCCEED!)
echo -^> done
pause
)
因此它总是返回成功并在我执行时打印0:echo%ERRORLEVEL%
你能帮我解决这个问题吗?我真的很想使用那个错误级别答案 0 :(得分:3)
您需要delayed expansion或使用IF ERRORLEVEL
:
@echo off
set Update=1
IF %Update% == 1 (
echo.
set /p "=- Copy stuff..." <NUL
xcopy /R /Y C:\test\2.lib C:\test1
IF ERRORLEVEL 1 (echo FAILED!) ELSE (echo SUCCEED!)
echo -^> done
pause
)
使用IF ERRORLEVEL 1
,您可以检查错误级别是 1还是更大。
答案 1 :(得分:1)
正如npocmaka所说,你有一个延迟扩展问题。
另一种方法是抛弃ERRORLEVEL并使用&&
和||
条件命令连接运算符。
@echo off
set Update=1
IF %Update% == 1 (
echo.
set /p "=- Copy stuff..." <NUL
xcopy /R /Y C:\test\2.lib C:\test1 && (echo SUCCEED!) || (echo FAILED!)
echo -^> done
pause
)
编辑显示使用多行
@echo off
set Update=1
IF %Update% == 1 (
echo.
set /p "=- Copy stuff..." <NUL
xcopy /R /Y C:\test\2.lib C:\test1 && (
echo First success command
echo SUCCEED!
) || (
echo First failure command
echo FAILED!
)
echo -^> done
pause
)