|
将PE(Boot.sdi和*.wim)安装在EFI分区或者MBR中引导分区内,内容和选项稍多,所以更加实用!
set bVldNum=n
set NumVol=0
set /a a=0
set NumSdi=1
set /a CountWim=0
set NumWimSource=1
set bHvFilePE=n
echo ------------------------------------------------------------------------------
echo.
echo 将PE安装在EFI分区或者MSR分区内,防止PE受损,没有这种分区你就老外了。
echo.
echo ------------------------------------------------------------------------------
echo PE放于指定盘根目录下WinPE文件夹,设备文件Boot.sdi和启动文件Boot.wim也固定。
set bIsUEFI=y
set /p bIsUEFI=请问BIOS是否UEFI,默认是,不是请输入小写n----
set bHvLab=n
set /p bHvLab=采用MBR但无MSR,或者MBR中MSR分区/ESP分区如已有盘符,输入y,其余直接回车----
if !bHvLab!==y (
set /p LabelEFI=请输入ESP分区或MBR中MSR分区盘符或者MBR无MSR分区时的系统盘符----
)
if not !bHvLab!==y (
::给EFI或者MSR分区分配盘符
set bHvSetESP=n
for %%i in (z y x w v u t s r q p o n m) do (
if !bHvSetESP!==n ( if not exist %%i: set LabelEFI=%%i&&set bHvSetESP=y )
)
echo list vol>%temp%\DiskPart.txt
echo exit>>%temp%\DiskPart.txt
diskpart /s %temp%\DiskPart.txt
set /p NumVolESP=请输入GPT中ESP分区或MBR中MSR分区的卷编号,直接回车----
echo select vol !NumVolESP!>%temp%\DiskPart.txt
echo assign letter=!LabelEFI!>>%temp%\DiskPart.txt
echo exit>>%temp%\DiskPart.txt
diskpart /s %temp%\DiskPart.txt
)
::UEFI引导需要PE源盘安装硬盘PE,默认需要本PE源盘,MBR引导,默认也要
set bCopyPE=y
set /p bCopyPE=请问是否需要复制PE文件,默认需要,不需要输入小写n----
if not !bCopyPE!==n (
set name_PE=PE_MBY
set /p name_PE=默认安装PE于!LabelEFI!:\PE_MBY目录,也可输入目录名字,如PE_WYS----
if not exist !LabelEFI!:\!name_PE!\ md !LabelEFI!:\!name_PE!\
set name_PathSdi=!name_PE!
set name_PathWim=!name_PE!
set bHvLSr=n
for /l %%i in (1,1,5) do (
if !bHvLSr!==n (
set /p LPartU=请输入PE源文件所在盘盘符,可以是本地硬盘,不带冒号----
if not exist !LPartU!: echo 这个盘符根本就没有使用了,你不要搞笑好吧
if exist !LPartU!: set bHvLSr=y
)
)
echo.
dir !LPartU!:\*.sdi /b /s >%temp%\fdSeek.txt
echo 查找到!LPartU!分区下所有映像引导文件*.sdi如下表
echo -----------------------------------------------------
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do ( set /a a+=1&&echo 系统引导文件:!a! %%i)
set /a CountWim=!a!
if !a!==0 echo 该分区无PE系统映像引导文件,退出重来吧!&&goto End
echo -----------------------------------------------------
set /p NumSdi=请输入系统映像引导文件序号,我不检测无效序号,默认1----
set bVldNSr=n
for /l %%i in (1,1,!CountWim!) do ( if !NumSdi!==%%i set bVldNSr=y )
if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End
echo.
dir !LPartU!:\*.wim /b /s >%temp%\fwSeek.txt
echo 查找到!LPartU!分区下所有映像文件如下表
echo -----------------------------------------------------
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do ( set /a a+=1&&echo PE系统映像:!a! %%i)
set /a CountWim=!a!
if !a!==0 echo 该分区无PE系统映像文件,退出重来吧!&&goto End
echo -----------------------------------------------------
set /p NumWimSource=请输入PE系统映像文件序号,我不检测无效序号,默认1----
set bVldNSr=n
for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y )
if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do (
set /a a+=1
if !a!==!NumSdi! copy /y %%i !LabelEFI!:\!name_PE!\boot.sdi
)
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do (
set /a a+=1
if !a!==!NumWimSource! copy /y %%i !LabelEFI!:\!name_PE!\boot.wim
)
)
if !bIsUEFI!==n (
set bCopyBoot=n
set /p bCopyBoot=是否需要从PE源盘复制MBR启动环境文件,默认不,需要输入小写y----
if not !bCopyBoot!==n (
set bHvLSr=n
for /l %%i in (1,1,5) do (
if !bHvLSr!==n (
set /p LPartPE=请输入PE源盘盘符,然后回车----
if not exist !LPartPE!: echo 这个盘符根本就没有使用了,你不要搞笑好吧
if exist !LPartPE!: set bHvLSr=y
)
)
if not exist !LPartPE!:\boot\ ( echo 这个盘里没有启动环境文件,你不要搞笑好吧!&& goto End )
xcopy /h /y !LPartPE!:\bootmgr !LabelEFI!:\
if exist !LabelEFI!:\boot\ rd /s /q !LabelEFI!:\boot\
if not exist !LabelEFI!:\boot\ md !LabelEFI!:\boot\
robocopy !LPartPE!:\boot\ !LabelEFI!:\boot\ /e /xf bcd
)
)
set bbPE=y
set /p bbPE=请问是否建PE菜单项,默认建,如果不建输入小写n----
if not !bbPE!==n (
if !bCopyPE!==n (
::没有复制源文件,说明ESP/MSR分区中已经存在PE源文件,查找相应路径
echo.
dir !LabelEFI!:\*.sdi /b /s >%temp%\fdSeek.txt
echo 查找到!LabelEFI!分区下所有映像引导文件*.sdi如下表
echo -----------------------------------------------------
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do ( set /a a+=1&&echo 系统引导文件:!a! %%i )
set /a CountWim=!a!
if !a!==0 echo 该分区无PE系统映像引导文件,退出重来吧!&&goto End
echo -----------------------------------------------------
set /p NumSdi=请输入系统映像引导文件序号,我不检测无效序号,默认1----
set bVldNSr=n
for /l %%i in (1,1,!CountWim!) do ( if !NumSdi!==%%i set bVldNSr=y )
if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do (
set /a a+=1
if !a!==!NumSdi! (
set namePathSdi=%%i
set name_PathSdi=!namePathSdi:~3,-9!
)
)
echo 引导文件路径是:!name_PathSdi!
set /p name_PathSdi=如果路径有误,请手工输入,默认不需要,直接回车----
echo.
dir !LabelEFI!:\*.wim /b /s >%temp%\fwSeek.txt
echo 查找到!LabelEFI!分区下所有PE映像文件如下表
echo -----------------------------------------------------
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do ( set /a a+=1&&echo PE系统映像:!a! %%i)
set /a CountWim=!a!
if !a!==0 echo 该分区无PE系统映像文件,退出重来吧!&&goto End
echo -----------------------------------------------------
set /p NumWimSource=请输入PE系统映像文件序号,我不检测无效序号,默认1----
set bVldNSr=n
for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y )
if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End
set /a a=0
for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do (
set /a a+=1
if !a!==!NumWimSource! (
set namePathWim=%%i
set name_PathWim=!namePathWim:~3,-9!
)
)
echo PE系统文件路径是:!name_PathWim!
set /p name_PathWim=如果路径有误,请手工输入,默认不需要,直接回车----
)
set name_MenuPE=PE_MBY
set /p name_MenuPE=输入菜单项名字,默认PE_MBY,可自行输入,如MAXDOS_WYS----
echo list vol>%temp%\DiskPart.txt
echo exit>>%temp%\DiskPart.txt
diskpart /s %temp%\DiskPart.txt
set /p NumVolESP=请输入GPT中ESP分区或MBR中MSR分区的卷编号,直接回车----
bcdedit /create {bootmgr} /d "Marc Boot Manager" >nul 2>nul
bcdedit /set {bootmgr} device partition=\device\harddiskvolume!NumVolESP! >nul 2>nul
::创建设备项
bcdedit /create /d "!name_MenuPE!" /device>%~dp0fdid.txt
::取得所生成的设备标识符
for /f "tokens=2 delims= " %%i in (%~dp0fdid.txt) do (set fdid=%%i)
::设置设备所在分区
bcdedit /set !fdid! ramdisksdidevice partition=!LabelEFI!:
::设置设备所在的固定路径
bcdedit /set !fdid! ramdisksdipath \!name_PathSdi!\boot.sdi
::创建菜单项
bcdedit /create /d "!name_MenuPE!" /application osloader>%~dp0fmid.txt
::取得所生成的菜单标识符
for /f "tokens=2 delims= " %%i in (%~dp0fmid.txt) do (set fmid=%%i)
::设置启动设备
bcdedit /set !fmid! device ramdisk=[!LabelEFI!:]\!name_PathWim!\boot.wim,!fdid!
::设置系统设备
bcdedit /set !fmid! osdevice ramdisk=[!LabelEFI!:]\!name_PathWim!\boot.wim,!fdid!
::设定启动程序(winload)的路径
if not !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.efi
if !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.exe
::设置系统根目录
bcdedit /set !fmid! systemroot \windows
::开启detecthal支持
bcdedit /set !fmid! detecthal yes
::开启WinPE支持
bcdedit /set !fmid! winpe yes
::设置nx为optin
bcdedit /set !fmid! nx optin
::设置为最后一项显示
bcdedit /displayorder !fmid! /addlast
bcdedit /timeout 2
bcdedit /enum
)
del /f /s /q %~dp0fdid.txt>nul 2>nul
del /f /s /q %~dp0fmid.txt>nul 2>nul
|
|