Skip to content

Instantly share code, notes, and snippets.

@ILPlais
Created August 11, 2025 15:31
Show Gist options
  • Select an option

  • Save ILPlais/55d52f4bbb59e877f6199c714ae8f8ee to your computer and use it in GitHub Desktop.

Select an option

Save ILPlais/55d52f4bbb59e877f6199c714ae8f8ee to your computer and use it in GitHub Desktop.
VirtualBox VM Backup Batch
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
COLOR 02
TITLE VM Backup...
ECHO ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
ECHO º Information retrieval... º
ECHO ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ECHO.
REM VM name
SET /P VMName=Please enter the name of the VM to be archived:
ECHO.
REM Shut down the computer after the backup
SEt /P ShutWhenDone=Do you want to shut down the computer after the backup is complete? (Y/N)
REM Constants
SET VBoxManage="%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe"
SET DestDir=%CD%
REM Create destination directory if it does not exist
IF NOT EXIST "%DestDir%" (
MD "%DestDir%"
IF ERRORLEVEL 1 GOTO ERROR
)
REM Retrieving VM information
ECHO Retrieving VM information...
%VBoxManage% showvminfo "%VMName%" --machinereadable|ENDDSTR /B /C:"name=">tmp.txt
IF ERRORLEVEL 1 GOTO ERROR
%VBoxManage% showvminfo "%VMName%" --machinereadable|ENDDSTR /B /C:"UUID=">>tmp.txt
IF ERRORLEVEL 1 GOTO ERROR
%VBoxManage% showvminfo "%VMName%" --machinereadable|ENDDSTR /B /C:"CfgFile=">>tmp.txt
IF ERRORLEVEL 1 GOTO ERROR
REM Storing information in local variables
FOR /F "delims=" %%A IN (tmp.txt) DO SET TMP_%%A
REM Remove quotation marks from the VM name
FOR /F "useback tokens=*" %%a IN ('%TMP_name%') DO SET TMP_name=%%~a
REM Remove quotation marks from the configuration path
FOR /F "useback tokens=*" %%a IN ('%TMP_CfgFile%') DO SET TMP_CfgFile=%%~dpa
DEL tmp.txt
ECHO VM Name: %TMP_name%
ECHO VM UUID: %TMP_UUID%
ECHO VM Path: %TMP_CfgFile%
ECHO.
ECHO VM Backup Folder: %DestDir%
ECHO.
ECHO ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
ECHO º Starting VM backup... º
ECHO ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ECHO.
TITLE Backup of VM %TMP_name% (%TMP_UUID%)...
ECHO Backup of VM %TMP_name% (%TMP_UUID%)...
%VBoxManage% export "%VMName%" --output="%DestDir%\%TMP_name%.ova"
IF ERRORLEVEL 1 GOTO ERROR
IF ERRORLEVEL 0 GOTO OK
:ERROR
TITLE Error
COLOR 0C
ECHO.
ECHO ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
ECHO º An error occurred º
ECHO ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ECHO.
GOTO END
:OK
TITLE Done
COLOR 0A
ECHO.
ECHO ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
ECHO º Export done º
ECHO ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
IF "%ShutWhenDone%" == "O" (
ECHO Start the computer shutdown in 5 minutes...
SHUTDOWN /S /T 300 /C "Shutdown after the VM backup is complete."
)
ECHO.
GOTO END
:END
PAUSE
IF EXIST tmp.txt DEL tmp.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment