我的 C++ Visual Studio 2010 项目中有一个构建后事件,它使用 command xcopy
,但是当这个 xcopy 返回错误代码(> 0)时,所有构建也失败并消息“构建不成功”,我怎样才能在构建事件?
谢谢!
我的 C++ Visual Studio 2010 项目中有一个构建后事件,它使用 command xcopy
,但是当这个 xcopy 返回错误代码(> 0)时,所有构建也失败并消息“构建不成功”,我怎样才能在构建事件?
谢谢!
您可以使用Exec
任务的IgnoreExitCode
:
<Target Name="MyAwesomePostBuildTarget" AfterTargets="Build">
<Exec IgnoreExitCode="true" Command="xcopy etc. etc." />
</Target>
|| exit /b 0
您可以通过附加到命令末尾来覆盖(几乎)任何批处理 CMD 的失败结果。例子:
del somefile.txt || exit /b 0
这样,批处理文件的工作方式有点像 C。您可以使用 && 来在前一个命令成功时有条件地运行命令,而 || 在前一个命令失败时运行命令。
exit /b 0
告诉 CMD 处理器退出脚本并将错误级别设置为零 (0)。永远不要忘记包含 /b 开关!没有它,CMD 将退出调用脚本以及当前脚本,这很少(如果有的话)是所需的行为。
我使用 Visual Studio IDE 中的这个技巧,因此无需进行低级项目黑客攻击。它适合一行,这在 IDE 中也很方便。
顺便说一句,另一个有用的技巧是使命令静音:
xcopy srcfile destfile 1>nul 2>nul || exit /b 0
1
是标准输出,2
是标准错误。众所周知,Windows 的 shell 程序套件在它们可能使用的输出方面不一致,所以我通常只管两者或都不管。