Batch file 批处理错误级别工作不正常

Batch file 批处理错误级别工作不正常,batch-file,msbuild,copy,errorlevel,Batch File,Msbuild,Copy,Errorlevel,所以我对批处理的错误级别有很多问题。这对我不起作用。 我有一个自己的ms build批处理脚本,无论我做什么,我总是从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.li

所以我对批处理的错误级别有很多问题。这对我不起作用。 我有一个自己的ms build批处理脚本,无论我做什么,我总是从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
)
@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)
因此,当我这样做时,它总是返回successful并打印0:echo%ERRORLEVEL%

你能帮我吗?我真的想在这里使用您需要的errorlevel,或者使用:

@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)
使用
IF ERRORLEVEL 1
可以检查ERRORLEVEL是否为1或更大。

您需要在此处或使用:

@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)

使用
IF ERRORLEVEL 1
可以检查ERRORLEVEL是否为1或更大。

正如Npcmaka所说,您有延迟扩展问题

另一种方法是放弃ERRORLEVEL,改用
&&
|
条件命令串联运算符

@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)
显示多行使用的编辑

@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)

正如Npcmaka所说,您遇到了延迟扩展问题

另一种方法是放弃ERRORLEVEL,改用
&&
|
条件命令串联运算符

@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)
显示多行使用的编辑

@echo关闭
设置更新=1
如果%Update%==1(
回响
设置/p“=-复制内容…”完成
暂停
)

啊,太好了,它正在工作!!谢谢!!那么这就是检查所有errorlevels>=1?为了使它更具可读性,我想我会尝试:如果错误级别为0(echo成功!),否则(echo失败!),但不幸的是,这不起作用。你知道为什么吗?@Scorpion因为
如果errorlevel0
将捕获大于0的errorlevels,其中包括1,2…太好了,它正在工作!!谢谢!!那么这就是检查所有errorlevels>=1?为了使它更具可读性,我想我会尝试:如果错误级别为0(echo成功!),否则(echo失败!),但不幸的是,这不起作用。你知道为什么吗?@Scorpion因为
IF ERRORLEVEL 0
将捕获大于0的errorlevels,其中包括1,2…感谢您的选择!但由于我要检查的命令通常要长得多,因此我将在单独的一行中进行检查,以使其更具可读性:)@Scorpion-???行数与技术上的差异无关。你仍然可以用这种技巧使用多行。谢谢你的努力!对不起,我之前没有说得很恰当,但我的意思是,它(对我来说)不太容易阅读,而且我认为当同事们将要检查我的批次时,他们也不容易阅读。这就是我坚持使用npocmaka解决方案的原因。但你也得到了我的+1:)谢谢你的选择!但由于我要检查的命令通常要长得多,因此我将在单独的一行中进行检查,以使其更具可读性:)@Scorpion-???行数与技术上的差异无关。你仍然可以用这种技巧使用多行。谢谢你的努力!对不起,我之前没有说得很恰当,但我的意思是,它(对我来说)不太容易阅读,而且我认为当同事们将要检查我的批次时,他们也不容易阅读。这就是我坚持使用npocmaka解决方案的原因。但你也得到了我的+1:)
@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
)