@echo off
@rem This script is called by x:WindowsSystem32Startnet.cmd – WinPE
@echo.
@echo.
@echo.
@echo.
@rem *******************************************************************
@rem FLASH_BIOS=1 Auto flash BIOS / FLASH_BIOS=0 Do not auto flash BIOS
@rem *******************************************************************
@echo.
set FLASH_BIOS=0
@echo.
@echo Running Intel Optimization powercfg for improved imaging times
@echo.
@echo call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
@echo.
@echo.
@echo.
@rem *****************************************************************
@rem List all the disks, then search the volumes of each one to see
@rem which disks may have "Winpe" in the label. We will ignore that
@rem disk and use the first disk without the Winpe label that we find.
@rem *****************************************************************
@echo.>x:Listdisk.txt
@echo list disk>>x:Listdisk.txt
@echo exit>>x:Listdisk.txt
@echo call diskpart /s x:Listdisk.txt
call diskpart /s x:Listdisk.txt>x:Disks.txt
@echo.
@rem Set Disk equal to blank to start
set disk=
@echo.
@rem
@rem This line will write a diskpart script to select the disk and detail it's contents.
@rem We use this output to find a disk that does NOT have Winpe as the volume label.
@rem That disk will have the OS installed to it. This way you can exclude USB from diskpart.
@rem
@rem This works around the issue where the USB key is sometimes enumerated as disk 0 and the
@rem SSD is disk 1.
@rem
for /f "skip=8 tokens=2" %%A in (x:Disks.txt) do (
@echo sel disk %%A>x:Par.txt
@echo det disk>>x:Par.txt
@echo exit>>x:Par.txt
if NOT "%%A"=="DiskPart…" call :ListPar %%A
)
if %Disk%=="" echo No disk found without a volume label of "Winpe"&& set disk=0
@echo Using Disk "%Disk%"
@echo.
@echo *****************************************************************
@rem Map drive letter for Install.wim and Winre.wim
@echo *****************************************************************
@rem Create an output file containing all the drive letters
@echo.>x:listVol.txt
@echo list volume>>x:listVol.txt
@echo exit>>x:listVol.txt
@echo call diskpart /s x:listVol.txt
call diskpart /s x:Listdisk.txt>x:Output.txt
@echo call diskpart /s x:listVol.txt>x:Output.txt
diskpart /s x:listVol.txt>x:Output.txt
@echo.
@rem Go through each drive letter, looking for the imagesInstall.txt file
for /f "skip=8 tokens=3" %%A in (x:Output.txt) do (
if exist %%A:imagesinstall.txt set InstallPath=%%A:images&& echo "Found device with images folder and install.txt file"
)
@echo.
@echo.
@echo.
@echo *****************************************************************
@echo Checkup SingleOS or DualOS or whether exist windows partiton
@echo *****************************************************************
@rem create diskpart script for search windows partitions from emmc disk
@echo.>x:ListPar.txt
@echo select disk "%Disk%" >>x:ListPar.txt
@echo list partition >>x:ListPar.txt
@echo exit >>x:ListPar.txt
@echo.
@rem run diskpart script
diskpart /s x:ListPar.txt >x:eMMCPar.txt
@echo.
@rem SingleOS / DualOS switch
find "Partition 6" x:eMMCPar.txt >nul
if %ERRORLEVEL% NEQ 0 Goto :SingleOS
@rem ensure it's DualOS,and check whether exist windows partition,if not:create the new windows partition
find "Partition 12" x:eMMCPar.txt >nul
if %ERRORLEVEL% NEQ 0 Goto : DualOS
@echo.>x:checkpart.txt
@echo select disk "%Disk%">>x:checkpart.txt
@echo list partition>>x:checkpart.txt
@echo exit>>x:checkpart.txt
@echo call diskpart /s x:checkpart.txt>x:outpar.txt
call diskpart /s x:checkpart.txt>x:outpar.txt
@echo.
@echo.>x:DelPar.txt
@echo select disk "%Disk%">>x:DelPar.txt
for /f "skip=21 tokens=2" %%A in (x:outpar.txt) do (
if %%A NEQ DiskPart… echo select partition %%A>>x:DelPar.txt && echo delete partition override>>x:DelPar.txt
)
echo exit>>x:DelPar.txt
diskpart /s x:DelPar.txt
Goto : DualOS
:SingleOS
@echo.
@echo This is a SingleOS!
@echo.
@echo.
:UEFImode
@echo.
@rem ************************
@rem UEFI SECTION
@rem ************************
@echo The PC is booted in UEFI mode
@echo.>x:winpart.txt
@echo select disk "%Disk%">>x:winpart.txt
@echo clean>>x:winpart.txt
@echo convert gpt>>x:winpart.txt
@echo create partition efi size=100>>x:winpart.txt
@echo format quick fs=fat32 label="System">>x:winpart.txt
@echo assign letter="S">>x:winpart.txt
@echo create partition msr size=16>>x:winpart.txt
@echo create partition primary>>x:winpart.txt
@echo format quick fs=ntfs label="Windows">>x:winpart.txt
@echo assign letter="W">>x:winpart.txt
@echo shrink desired=1000>>x:winpart.txt
@echo create partition primary>>x:winpart.txt
@echo format quick fs=ntfs label="Recovery">>x:winpart.txt
@echo assign letter="R">>x:winpart.txt
@echo set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac">>x:winpart.txt
@echo gpt attributes=0×8000000000000001>>x:winpart.txt
@echo exit>>x:WinPart.txt
@echo Winpart.txt now contains…..
@echo.
type x:winpart.txt
@echo.
@echo.
@echo *****************************************************************
@echo Setting up the partition table
@echo *****************************************************************
@echo call diskpart /s x:winpart.txt
diskpart /s x:winpart.txt
@echo.
@echo.
@echo.
@echo.
@rem Check InstallPath was found and there are images in it.
if NOT EXIST %InstallPath%Install.wim echo "Install.wim NOT found." && goto :Error
@echo Install.wim FOUND at %InstallPath%imagesinstall.wim
@echo.
@echo.
@echo.
@echo *****************************************************************
@rem Switches to the USB disk
@rem Create folders on local (eMMC) disk and copy files from USB disk
@echo *****************************************************************
@echo.
@echo Making directories…
md w:recyclerscratch
if %errorlevel% NEQ 0 echo "Failed to make w:recyclerscratch directory" && goto :error
@echo.
md r:recoverywindowsre
if %errorlevel% NEQ 0 echo "Failed to make m:recoverywindowsre directory" && goto :error
@echo.
@echo.
@echo *****************************************************************
@echo Applying the Windows image from the USB
@echo *****************************************************************
@echo call dism /apply-image /imagefile:"%InstallPath%Install.wim" /index:1 /applydir:w: /compact /scratchdir:"w:recyclerSCRATCH
call dism /apply-image /imagefile:"%InstallPath%Install.wim" /index:1 /applydir:w: /compact /scratchdir:"w:recyclerSCRATCH
if %errorlevel% NEQ 0 echo "Failed to apply image to w:" && goto :error
@echo.
@echo *****************************************************************
@echo Rund SingleInstance
@echo *****************************************************************
@echo.
if EXIST W:RecoveryCustomizationsUSMT.ppkg dism /Apply-CustomDataImage /CustomDataImage:W:RecoveryCustomizationsUSMT.ppkg /ImagePath:W: /SingleInstance
@echo *****************************************************************
@rem Move WinRE to Recovery Partition
@echo *****************************************************************
@echo.
@echo Modifying attributes of winre.wim so we can move it.
attrib w:WindowsSystem32recoverywinre.wim -s -h -a -r
@echo move w:WindowsSystem32recoverywinre.wim r:recoverywindowsre
move w:WindowsSystem32recoverywinre.wim r:recoverywindowsre
if %errorlevel% NEQ 0 echo "Failed to move winre.wim to r:recoverywindowsre" && goto :error
@echo.
@echo reset attributes now
attrib r:RecoveryWindowsrewinre.wim +s +h +a +r
@echo.
@echo.
@echo *****************************************************************
@echo Setting the boot environment
@echo *****************************************************************
@echo call w:WINDOWSSYSTEM32BCDBOOT w:WINDOWS /s s: /f all
w:WINDOWSSYSTEM32BCDBOOT w:WINDOWS /s s: /f all
if %errorlevel% NEQ 0 echo "Failed to set boot information" && goto :error
@echo.
@echo.
@echo.
@echo *****************************************************************
@echo Setting the recovery environment
@echo *****************************************************************
@echo w:windowssystem32reagentc /SetREImage /Path r:RECOVERYWINDOWSRE /target w:windows
w:windowssystem32reagentc /SetREImage /Path r:RECOVERYWINDOWSRE /target w:windows
if %errorlevel% NEQ 0 echo "Failed to set recovery information" && goto :error
@echo.
attrib +H +R W:Recovery
rmdir /s /q w:recycler
if "%FLASH_BIOS%"=="1" GOTO :FLASH_BIOS
@echo *****************************************************************
@echo WIMboot image deployment COMPLETE. Type EXIT from Command
@echo Prompt to restart or turn off device.
@echo *****************************************************************
Wpeutil shutdown
color 2f
Goto :END
: DualOS
@echo.
@echo This is a DualOS!
@echo.
@echo.
@echo *****************************************************************
@echo Write the diskpart script now that we know what disk to use
@echo *****************************************************************
@echo.>x:winpart.txt
@echo select disk "%Disk%">>x:winpart.txt
@echo select volume "0">>x:winpart.txt
@echo attributes volume set hidden>>x:winpart.txt
rem @echo select volume "1">>x:winpart.txt
rem @echo attributes volume set hidden>>x:winpart.txt
@echo create partition efi size=100>>x:winpart.txt
@echo format quick fs=fat32 label="System">>x:winpart.txt
@echo assign letter="S">>x:winpart.txt
@echo create partition msr size=16>>x:winpart.txt
@echo create partition primary>>x:winpart.txt
@echo format quick fs=ntfs label="Windows">>x:winpart.txt
@echo assign letter="W">>x:winpart.txt
@echo shrink desired=1000>>x:winpart.txt
@echo create partition primary>>x:winpart.txt
@echo format quick fs=ntfs label="Recovery">>x:winpart.txt
@echo assign letter="M">>x:winpart.txt
@echo set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac">>x:winpart.txt
@echo gpt attributes=0×8000000000000001>>x:winpart.txt
@echo exit>>x:WinPart.txt
@echo.
@echo winpart.txt now contains…..
@echo.
type x:winpart.txt
@echo.
@echo.
@echo *****************************************************************
@echo Setting up the partition table
@echo *****************************************************************
@echo call diskpart /s x:winpart.txt
diskpart /s x:winpart.txt
@echo.
@echo.
@echo.
@echo.
@rem Check InstallPath was found and there are images in it.
if NOT EXIST %InstallPath%Install.wim echo "Install.wim NOT found." && goto :Error
@echo Install.wim FOUND at %InstallPath%install.wim
@echo.
@echo.
@echo.
@echo *****************************************************************
@rem Switches to the USB disk
@rem Create folders on local (eMMC) disk and copy files from USB disk
@echo *****************************************************************
@echo.
@echo Making directories…
md w:recyclerscratch
if %errorlevel% NEQ 0 echo "Failed to make w:recyclerscratch directory" && goto :error
@echo.
md M:recoverywindowsre
if %errorlevel% NEQ 0 echo "Failed to make M:recoverywindowsre directory" && goto :error
@echo.
@echo.
@echo *****************************************************************
@echo Applying the Windows image from the USB
@echo *****************************************************************
@echo call dism /apply-image /imagefile:"%InstallPath%Install.wim" /index:1 /applydir:w: /compact /scratchdir:"w:recyclerSCRATCH
call dism /apply-image /imagefile:"%InstallPath%Install.wim" /index:1 /applydir:w: /compact /scratchdir:"w:recyclerSCRATCH
if %errorlevel% NEQ 0 echo "Failed to apply image to w:" && goto :error
@echo.
@echo *****************************************************************
@echo Rund SingleInstance
@echo *****************************************************************
@echo.
if EXIST W:RecoveryCustomizationsUSMT.ppkg dism /Apply-CustomDataImage /CustomDataImage:W:RecoveryCustomizationsUSMT.ppkg /ImagePath:W: /SingleInstance
@echo *****************************************************************
@rem Move WinRE to Recovery Partition
@echo *****************************************************************
@echo.
@echo Modifying attributes of winre.wim so we can move it.
attrib w:WindowsSystem32recoverywinre.wim -s -h -a -r
@echo move w:WindowsSystem32recoverywinre.wim M:recoverywindowsre
move w:WindowsSystem32recoverywinre.wim M:recoverywindowsre
if %errorlevel% NEQ 0 echo "Failed to move winre.wim to M:recoverywindowsre" && goto :error
@echo.
@echo reset attributes now
attrib M:RecoveryWindowsrewinre.wim +s +h +a +r
@echo.
@echo.
@echo *****************************************************************
@echo Setting the boot environment
@echo *****************************************************************
@echo call w:WINDOWSSYSTEM32BCDBOOT w:WINDOWS /s s: /f all
w:WINDOWSSYSTEM32BCDBOOT w:WINDOWS /s s: /f all
if %errorlevel% NEQ 0 echo "Failed to set boot information" && goto :error
@echo.
@echo.
@echo.
@echo *****************************************************************
@echo Setting the recovery environment
@echo *****************************************************************
@echo w:windowssystem32reagentc /SetREImage /Path M:RECOVERYWINDOWSRE /target w:windows
w:windowssystem32reagentc /SetREImage /Path M:RECOVERYWINDOWSRE /target w:windows
if %errorlevel% NEQ 0 echo "Failed to set recovery information" && goto :error
@echo.
attrib +H +R W:Recovery
rmdir /s /q w:recycler
if "%FLASH_BIOS%"=="1" GOTO :FLASH_BIOS
@echo *****************************************************************
@echo WIMboot image deployment COMPLETE. Type EXIT from Command
@echo Prompt to restart or turn off device.
@echo *****************************************************************、
Wpeutil shutdown
color 2f
Goto :END
:FLASH_BIOS
@echo.
@echo *****************************************************************
@echo Flash BIOS
@echo *****************************************************************
@echo.
@echo BIOS file FOUND at %WinPESource%ImagesBIOS*.ROM
@echo.
xcopy /y %WinPESource%ImagesBIOS*.ROM %WinPESource%ScriptsTools
for /r "%WinPESource%ScriptsTools" %%Z in (*.ROM) do (
ren "%%Z" "%%~na.fd"
)
if NOT EXIST %WinPESource%ScriptsTools*.fd echo "Can not find the BIOS file" && goto :error
@REM Flash BIOS
%WinPESource%ScriptsToolsH2OFFT-W.exe
Del /q %WinPESource%ScriptsTools*.fd
if %errorlevel% NEQ 0 echo "Failed to flash BIOS" && goto :error
@echo *****************************************************************
@echo WIMboot image deployment COMPLETE. Type EXIT from Command
@echo Prompt to restart or turn off device.
@echo *****************************************************************
color 2f
Goto :END
:ERROR
@echo.
@echo An error has been detected.
color 4f
@echo.
goto :END
:ListPar
@REM This section is to bring a disk number and use it to List Partitions
@echo.
set TempDisk=%1
diskpart /s x:Par.txt>x:ParOutput.txt
for /f "skip=24 tokens=3" %%A in (x:ParOutput.txt) do (
if /i "%%A"=="no" set Disk=%TempDisk%
)
for /f "skip=26 tokens=4" %%A in (x:ParOutput.txt) do (
if /i NOT "%%A"=="Winpe" set Disk=%TempDisk%
)
Goto :EOF
:END
@rem
@rem Get finish time so we can evaluate total WinPE phase time.
@rem
call |time>x:StopTime.txt
@rem
@rem Now parse both files to display the Start and Finish Time
@rem
@echo.
@echo.
for /f "tokens=5" %%A in (x:starttime.txt) do echo Script Start Time is %%A
for /f "tokens=5" %%A in (x:stoptime.txt) do echo Script Stop Time is %%A
@echo.