@ECHO OFF
::Backup of Virtual Hard Drives and Configuration Files
::Only tested on Server 2003 running VMware Server version 2.0.1 build-156745
::http://www.virtuatopia.com/index.php/Controlling_VMware_Virtual_Machines_from_the_Command_Line_with_vmrun
::For a list of running VMs and on the server run this from the VM Host
::"C:\Program Files\VMware\VMware Server\vmrun.exe" -T server -h https://localhost:8333/sdk -u ADMIN -p PASS list
:WARNING
echo By running the backup the guest server(s) will be shutdown
echo Are you sure you wish to continue?
timeout /T 30
cls
:: Header of Logfile
echo. >> "C:\IT\VM-Backup.log"
echo %date% >> "C:\IT\VM-Backup.log"
::Variables:
set bakloc="\\vmserver2\e$\BACKUP-VM1"
SET /A SRV=1
set vmrun="C:\Program Files\VMware\VMware Server\vmrun.exe"
set username=ADMIN
set password=PASS
set datastore=E:\Virtual Machines
:: Verify mapped Drive "V:\"
if not exist v: net use v: %bakloc%
if not exist v: echo Mapped Drive V:\ or link to %bakloc% not present >> "C:\IT\VM-Backup.log"
if not exist v: goto END
set overall=%time%
goto %SRV%
:1
set start=%time%
set SERVER=TEST1
SET VMGUEST="[VMSERVER1] TEST1/Windows Server 2003 Enterprise Edition.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:2
set start=%time%
set SERVER=TEST2
SET VMGUEST="[VMSERVER1] TEST2/Windows XP Professional.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:3
set start=%time%
set SERVER=TEST3
SET VMGUEST="[VMSERVER1] TEST3/Windows Server 2003 Enterprise Edition.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:4
set start=%time%
set SERVER=TEST4
SET VMGUEST="[VMSERVER1] TEST4/Windows Server 2003.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:: Add new servers to the list above
:: Keep This Set Last but update the number!
:5
echo.
echo %start%
set start=%overall%
set finish=%time%
set SRV=0
set SERVER=done
goto CON
:CON
:: time conversion
set shh=%start:~0,2%
set smm=%start:~3,2%
set sss=%start:~6,2%
set sms=%start:~9,2%
if %shh% LSS 10 set shh=%shh:~1,1%
if %smm% LSS 10 set smm=%smm:~1,1%
if %sss% LSS 10 set sss=%sss:~1,1%
if %sms% LSS 10 set sms=%sms:~1,1%
SET /a Start100S=%shh%*360000+%smm%*6000+%sss%*100+%sms%
set fhh=%finish:~0,2%
set fmm=%finish:~3,2%
set fss=%finish:~6,2%
set fms=%finish:~9,2%
if %fhh% LSS 10 set fhh=%fhh:~1,1%
if %fmm% LSS 10 set fmm=%fmm:~1,1%
if %fss% LSS 10 set fss=%fss:~1,1%
if %fms% LSS 10 set fms=%fms:~1,1%
SET /a Finish100S=%fhh%*360000+%fmm%*6000+%fss%*100+%fms%
:: START midnight rollover. If so, add 1 day=8640000 1/100ths secs
IF %Finish100S% LSS %Start100S% SET /a Finish100S+=8640000
SET /a TookTime=%Finish100S%-%Start100S%
if %TookTime% LEQ 99 goto MILLI
if %TookTime:~0,-2% GEQ 3600 goto HRS
if %TookTime:~0,-2% GEQ 60 goto MINS
if %TookTime:~0,-2% GEQ 1 goto SECS
goto ERR0
:HRS
SET /A HRS=%TookTime:~0,-2%/3600
SET /A MINS=(%TookTime:~0,-2%-%HRS%*3600)/60
SET /A SECS=%TookTime:~0,-2%-(%HRS%*3600+%MINS%*60)
set ELAPSED=%HRS% Hours %MINS% Minutes %SECS%.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:MINS
SET /A MINS=%TookTime:~0,-2%/60
SET /A SECS=%TookTime:~0,-2%-%MINS%*60
set ELAPSED=%MINS% Minutes %SECS%.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:SECS
set ELAPSED=%TookTime:~0,-2%.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:MILLI
set ELAPSED=.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:ERR0
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:END
net use /del v: /y
exit
::Backup of Virtual Hard Drives and Configuration Files
::Only tested on Server 2003 running VMware Server version 2.0.1 build-156745
::http://www.virtuatopia.com/index.php/Controlling_VMware_Virtual_Machines_from_the_Command_Line_with_vmrun
::For a list of running VMs and on the server run this from the VM Host
::"C:\Program Files\VMware\VMware Server\vmrun.exe" -T server -h https://localhost:8333/sdk -u ADMIN -p PASS list
:WARNING
echo By running the backup the guest server(s) will be shutdown
echo Are you sure you wish to continue?
timeout /T 30
cls
:: Header of Logfile
echo. >> "C:\IT\VM-Backup.log"
echo %date% >> "C:\IT\VM-Backup.log"
::Variables:
set bakloc="\\vmserver2\e$\BACKUP-VM1"
SET /A SRV=1
set vmrun="C:\Program Files\VMware\VMware Server\vmrun.exe"
set username=ADMIN
set password=PASS
set datastore=E:\Virtual Machines
:: Verify mapped Drive "V:\"
if not exist v: net use v: %bakloc%
if not exist v: echo Mapped Drive V:\ or link to %bakloc% not present >> "C:\IT\VM-Backup.log"
if not exist v: goto END
set overall=%time%
goto %SRV%
:1
set start=%time%
set SERVER=TEST1
SET VMGUEST="[VMSERVER1] TEST1/Windows Server 2003 Enterprise Edition.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:2
set start=%time%
set SERVER=TEST2
SET VMGUEST="[VMSERVER1] TEST2/Windows XP Professional.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:3
set start=%time%
set SERVER=TEST3
SET VMGUEST="[VMSERVER1] TEST3/Windows Server 2003 Enterprise Edition.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:4
set start=%time%
set SERVER=TEST4
SET VMGUEST="[VMSERVER1] TEST4/Windows Server 2003.vmx"
Title Backup of %SERVER% in Progress
::if exist "V:\%server%" del "V:\%server%\*.*" /q
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% stop %VMGUEST% soft
timeout /T 120
xcopy "%datastore%\%SERVER%\*.vmdk" "V:\%SERVER%\" /C /R /Y
xcopy "%datastore%\%SERVER%\*.vmx" "V:\%SERVER%\" /C /R /Y
%vmrun% -T server -h https://localhost:8333/sdk -u %username% -p %password% start %VMGUEST%
set finish=%time%
goto CON
:: Add new servers to the list above
:: Keep This Set Last but update the number!
:5
echo.
echo %start%
set start=%overall%
set finish=%time%
set SRV=0
set SERVER=done
goto CON
:CON
:: time conversion
set shh=%start:~0,2%
set smm=%start:~3,2%
set sss=%start:~6,2%
set sms=%start:~9,2%
if %shh% LSS 10 set shh=%shh:~1,1%
if %smm% LSS 10 set smm=%smm:~1,1%
if %sss% LSS 10 set sss=%sss:~1,1%
if %sms% LSS 10 set sms=%sms:~1,1%
SET /a Start100S=%shh%*360000+%smm%*6000+%sss%*100+%sms%
set fhh=%finish:~0,2%
set fmm=%finish:~3,2%
set fss=%finish:~6,2%
set fms=%finish:~9,2%
if %fhh% LSS 10 set fhh=%fhh:~1,1%
if %fmm% LSS 10 set fmm=%fmm:~1,1%
if %fss% LSS 10 set fss=%fss:~1,1%
if %fms% LSS 10 set fms=%fms:~1,1%
SET /a Finish100S=%fhh%*360000+%fmm%*6000+%fss%*100+%fms%
:: START midnight rollover. If so, add 1 day=8640000 1/100ths secs
IF %Finish100S% LSS %Start100S% SET /a Finish100S+=8640000
SET /a TookTime=%Finish100S%-%Start100S%
if %TookTime% LEQ 99 goto MILLI
if %TookTime:~0,-2% GEQ 3600 goto HRS
if %TookTime:~0,-2% GEQ 60 goto MINS
if %TookTime:~0,-2% GEQ 1 goto SECS
goto ERR0
:HRS
SET /A HRS=%TookTime:~0,-2%/3600
SET /A MINS=(%TookTime:~0,-2%-%HRS%*3600)/60
SET /A SECS=%TookTime:~0,-2%-(%HRS%*3600+%MINS%*60)
set ELAPSED=%HRS% Hours %MINS% Minutes %SECS%.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:MINS
SET /A MINS=%TookTime:~0,-2%/60
SET /A SECS=%TookTime:~0,-2%-%MINS%*60
set ELAPSED=%MINS% Minutes %SECS%.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:SECS
set ELAPSED=%TookTime:~0,-2%.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:MILLI
set ELAPSED=.%TookTime:~-2% Seconds
IF %SERVER% NEQ done echo %SERVER% elapsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SERVER% EQU done echo Total elaspsed time: %ELAPSED% >> "C:\IT\VM-Backup.log"
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:ERR0
IF %SRV% EQU 0 goto END
SET /A SRV=%SRV%+1
goto %SRV%
:END
net use /del v: /y
exit