批处理错误级别无法正常工作

时间:2016-03-11 13:58:46

标签: batch-file msbuild copy errorlevel

所以我对批次的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%

你能帮我解决这个问题吗?我真的很想使用那个错误级别

2 个答案:

答案 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
)