将ERRORLEVEL重置为零的最简单方法是什么?

我有一个生成后事件,为ac#项目运行一些命令。 最后一个命令有时会导致ERRORLEVEL值不等于零,然后构build失败。

我想追加一个额外的命令行来始终将ERRORLEVEL值设置为零。 什么是最方便的方法呢?

如果使用exit /b 0 ,则可以从子批处理脚本中返回错误errorlevel 0 ,而不会退出父级。

似乎做的伎俩:

 ver > nul 

并非一切正常,不清楚为什么。 例如,下面不要:

 echo. > nul cls > nul 

在生成前或生成后事件中,如果可执行文件的返回码大于零,并且对可执行文件的调用不是生成前或生成后事件的最后一行,可以使用快捷方式将其静音并避免触发一个非零错误errorlevel的检查是跟随失败行显式返回零:

 cmd /c "exit /b 0" 

这实质上是前面提到的解决scheme的通用组合,它们不仅可以用于构build前或构build后事件的最后一行。

我发现“0号出口”看起来是解决这个问题的好方法。

用法示例:

NET STOP UnderDevService / Y

退出0

如果UnderDevService服务未启动。

我使用VERIFYVERIFY > nul

如果这是一个像“后生成事件”等片段,那么你会很好追加:

 (...) || ver > nul 

在最后一个命令的末尾。

另外

 cmd /c "exit /b 0" 

是非常干净和非惯用的 – 一个知道Windows shell的读者会知道发生了什么,你的意图是什么。

但是,如果您使用的是批处理脚本,则可能需要使用subrotine,这与akf答案中的“子批处理脚本”相当。

有一个子程序:

 :reset_error exit /b 0 

然后就是了

 call :reset_error 

无论你在哪里需要它。

这是一个完整的例子:

 @echo off rem *** main *** call :raise_error echo After :raise_error ERRORLEVEL = %ERRORLEVEL% call :empty echo After :empty ERRORLEVEL = %ERRORLEVEL% call :reset_error echo After :reset_error ERRORLEVEL = %ERRORLEVEL% :: this is needed at the end of the main body of the script goto:eof rem *** subroutines *** :empty goto:eof :raise_error exit /b 1 :reset_error exit /b 0 

哪些产出:

 After :raise_error ERRORLEVEL = 1 After :empty ERRORLEVEL = 1 After :reset_error ERRORLEVEL = 0 

正如你所看到的 – 只是调用并通过goto返回:eof是不够的。

在每个可能失败的命令之后添加>nul ,这似乎可以防止构build失败。

您仍然可以通过检查%errorlevel%来检查命令的结果。

例如:

 findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it) 

我正在使用这个:

ping localhost -n 1> null

我个人使用这个:

cd .

即使在unix shell中也可以工作。

但是,这个可能会快一点:

type nul>nul

因为Process Monitorcd .上显示QueryDirectory调用cd .

我总是用过;

 set ERRORLEVEL=0 

我一直用它驴的年。