use*_*319 66 windows cmd batch-file errorlevel
我有一个post-build事件,它为ac#project运行一些命令.最后一个命令有时会导致ERRORLEVEL值不等于零,然后构建失败.
我想附加一行额外的命令来始终将ERRORLEVEL值设置为零.最方便的方法是什么?
akf*_*akf 64
如果您使用,exit /b 0
您可以errorlevel 0
从子批处理脚本中返回一个而不退出父级.
Jas*_*aty 51
似乎可以做到这一点:
ver > nul
Run Code Online (Sandbox Code Playgroud)
并非一切正常,而且不清楚为什么.例如,以下内容不:
echo. > nul
cls > nul
Run Code Online (Sandbox Code Playgroud)
Jef*_*rey 29
在构建前或构建后事件中,如果可执行文件的返回代码大于零,并且对可执行文件的调用不是构建前或构建后事件的最后一行,则快速将其静音并避免触发检查非零errorlevel
是使用明确返回零的行跟随失败的行:
cmd /c "exit /b 0"
Run Code Online (Sandbox Code Playgroud)
这基本上是前面提到的解决方案的通用组合,它不仅可以用于构建前或构建后事件的最后一行.
use*_*319 17
我发现"退出0"看起来是处理这个问题的好方法.
用法示例:
NET STOP UnderDevService/Y.
退出0
如果未启动UnderDevService服务.
And*_*dry 10
我个人用这个:
cd .
即使在unix shell中也能工作.
但是,这个可能会快一点:
type nul>nul
因为Process Monitor
节目QueryDirectory
要求cd .
PS:
cd .
在unix shell中有另一个好的副作用.如果在擦除之前打开了它,它会在终端中恢复重新创建的工作目录.
如果这是“构建后事件”等片段,那么您可以附加:
(...) || ver > nul
Run Code Online (Sandbox Code Playgroud)
在最后一个命令的末尾。
或者
cmd /c "exit /b 0"
Run Code Online (Sandbox Code Playgroud)
非常干净且不惯用语——了解 Windows shell 的读者会知道发生了什么,以及您的意图是什么。
但是,如果您使用的是批处理脚本,则可能需要使用子程序,它是 akf 答案中“子批处理脚本”的轻量级等效项。
有一个子程序:
:reset_error
exit /b 0
Run Code Online (Sandbox Code Playgroud)
然后只是
call :reset_error
Run Code Online (Sandbox Code Playgroud)
无论你需要它。
这是一个完整的例子:
@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
Run Code Online (Sandbox Code Playgroud)
哪些输出:
After :raise_error ERRORLEVEL = 1
After :empty ERRORLEVEL = 1
After :reset_error ERRORLEVEL = 0
Run Code Online (Sandbox Code Playgroud)
如您所见 - 仅通过 goto:eof 调用和返回是不够的。
归档时间: |
|
查看次数: |
70019 次 |
最近记录: |