【发布时间】:2014-03-21 22:31:20
【问题描述】:
我有一个简单的批处理文件来部署 VM 映像(.ova 文件),然后将其导入 VirtualBox 并启动它。
这是脚本的最后几行:
call "%vboxmanage_exe%" import "%dest_path%\%latest_vm_filename%" --vsys 0 --vmname %vm_name%
IF %ERRORLEVEL% neq 0 (
ECHO VM import failed!
EXIT /b 1
)
call "%vboxmanage_exe%" startvm "%vm_name%" --type headless
IF %ERRORLEVEL% neq 0 (
ECHO VM start failed!
EXIT /b 1
)
启动命令实际上是这样的:
VBoxManage.exe startvm "D:\Vms\Latest.ova" --type headless
当已经有一个具有我在命令中指定的名称的 VM 时,会出现错误并且我的脚本会捕获它(回显和退出都执行)。
但是,如果导入成功并尝试启动它,但失败了,则错误不会被捕获并继续... startvm 命令总是返回等于 0 的退出代码?
这是我在尝试启动 VM 时遇到的错误(引入以测试机制)。
VBoxManage.exe: error: Nonexistent host networking interface, name 'Broadcom NetXtreme 57xx Gigabit Controller' (VERR_INTERNAL_ERROR)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Console, interface IConsole
我如何知道启动是否失败,并以适当的错误代码从我的批处理文件中退出。我想我可以检查 VM 状态以查看它是否正在运行(尚未研究这种可能性),但我不希望这样做并从 startvm 命令中获取实际错误。
编辑:我发现唯一相似的是:batch: Exit code for "rd" is 0 on error as well
我尝试了建议的解决方案,但对我不起作用。
【问题讨论】:
-
这并不能回答你的问题,因为我不认为这是你的问题,但这是一个相关的鲜为人知的事情,应该更广为人知:ERRORLEVEL is not %ERRORLEVEL%
标签: batch-file virtualbox exit-code