@echo off Echo AutoBootVHD-BCD.cmd written by Dan Stolts Http://itproguru.com echo. if "%1" == "" ( goto :Usage ) if "%1" == "/?" ( goto :Usage ) if "%1" == "-?" ( goto :Usage ) set VHDFILENAME=%1 set VHDDESC="Boot2VHD" if not {%2} == {} ( set VHDDESC=%2 ) @echo VHDFileName=%1 @echo Creating VHD boot entry for %VHDDESC%.... Rem we need to store the output of the copy so we can reuse the GUID Rem We could do this without a temp file but it would be much harder to read Rem Need to have write permissions in the %temp% folder (assumed) cmd /c " bcdedit /copy {current} /d %VHDDESC% " > %temp%\tmpVHDGUID.txt Rem Find the GUID in the output of the BCDEdit FOR /F "tokens=7 delims=. " %%A in (%temp%\tmpVHDGUID.txt) DO set GUID=%%A @echo VHD boot entry GUID = %GUID% Rem We need to strip out the drive of the filename parameter Rem ~pna in for loop = Path+Name+Extension Rem echo %1 Rem You must use the quotes in the for loop for /F %%B in ("%VHDFileName%") do set VHDBCDFName=%%~pnxB echo. Rem cleanup temp file del %temp%\tmpVHDGUID.txt @echo Configuring VHD boot entry.... @echo. @echo setting Device... vhd=[locate]%VHDBCDFName% bcdedit /set %GUID% device vhd=[locate]%VHDBCDFName% @echo setting OSDevice... vhd=[locate]%VHDBCDFName% bcdedit /set %GUID% osdevice vhd=[locate]%VHDBCDFName% @echo Setting detecthal on bcdedit /set %GUID% detecthal on set vhdDEFAULT=0 Rem If they did not pass a BootMenuDescription the -d will be %2 if `%2` == `-d` ( set vhdDEFAULT=1 @echo Default Enabled.. ) if `%3` == `-d` ( set vhdDEFAULT=1 Echo Default Enabled... ) if %vhdDEFAULT% == 1 ( @echo Making VHD boot entry the default.... bcdedit /default %GUID% ) @echo. @echo VHD boot configuration complete. @echo Please restart your machine to use the new option! @echo. @Echo run bcdedit to see the new entry @echo. goto :Exit :Usage @echo. @echo NOTE: You must run the command from an elevated command prompt. @echo. @echo Syntax: AutoBootVHD-BCD.cmd (VHD_FileName_AND_Path) [BootMenuDescription] [-d] @echo. BootMenuDescription is optional and defaults to "Boot2VHD" @echo -d is optional and will make this entry the default boot option @echo Ex: AutoBootVHD-BCD D:\bootvhd\Boot2008R2.vhd My_Boot_To_VHD -d @echo . @echo If you have a path or description with spaces put quotes around it @echo Ex: AutoBootVHD-BCD "D:\My VHds\Win 2008 R2.vhd" "My Boot2Vhd" -d @echo . @echo Written by Dan Stolts ITProGuru no warranties, Use at your own risk @echo see blog post at ITProguru.com @echo. @echo NOTE: You must run the command from an elevated command prompt. :Exit Rem the following commands were used for debugging only. rem bcdedit Rem pause Rem bcdedit /delete %GUID% @Echo. @Echo written by Dan Stolts (ITProGuru) provide feedback to http://ITProGuru.com @Echo. @Echo. Rem - 2012/03/01 - Added quotes in FOR Loop to eliminate issues with folder structure and names bigger than 8.3