通过编辑BCD文件给WIN7光盘添加PE启动引导菜单这篇教程转载自于某技术博客,原文标题:如何编辑BCD文件给WIN7光盘添加PE启动引导菜单,希望本文对于制作启动盘的朋友有所帮助。
一、WIN7光盘引导文件与目录
根目录bootmgr引导BOOT目录中的BCD文件,启动选项菜单,进入WIN7安装或进入PE。当然启动所需的不仅只是这些,BOOT目录的其他文件也是需要的(见本文最后部分)。典型的光盘见WIN7 33IN1系列。
如果是UEFI的主板,是bootmgr.efi引导EFI中microsoft目录中的BCD文件。同样,EFI目录中的其他文件是不可缺的(部分字体文件可删除)。说明,WIN7的32位光盘中没有EFI目录及文件,如果想用,可以借助一下WIN8光盘。
所以,给WIN7光盘添加PE启动核心是编辑BCD文件。
二、使用BCDEDIT.EXE编辑BCD文件
BCDEDIT.EXE文件是WIN7系统自带的。XP下没有,WIN7 PE有没有要看PE制作者是否保留它。
下面开始实例操作。例子是给WIN7光盘添加双PE,32位PE3.0和64位PE3.0。
将WIN7光盘的BOOT目录提取到F盘(F盘为例)
1、在F盘建一个CMD为后缀的批处理文件。名称:A.cmd,内容如下,并执行。
set path=f:ootcd
bcdedit /store %path%
bcdedit /store %path% /timeout 20
bcdedit /store %path% /set {globalsettings} locale zh-cn
bcdedit /store %path% /set {bootloadersettings} locale zh-cn
bcdedit /store %path% /set {bootmgr} locale zh-cn
bcdedit /store %path% /set {default} locale zh-cn
bcdedit /store %path% /set {memdiag} locale zh-cn
bcdedit /store %path% /set {default} description "安装 Windows 7"
bcdedit /store %path% /copy {default} /d "启动 WinPE 3.0 (64位)"
bcdedit /store %path% /copy {default} /d "启动 WinPE 3.0 (32位)"
PAUSE
2、新建一个PEenum_all.cmd文件,内容如下:
bcdedit /store F:ootcd /enum all >bcd.txt
pause
3、查看F盘是否有一个BCD.TXT文件。这个文件的部分内容如下(蓝色与绿色字细看一下):
Windows 启动管理器
-------------------
标识符 {bootmgr}
description Windows Boot Manager
locale zh-cn
inherit {globalsettings}
default {default}
displayorder {default}
{18422457-4f48-11e2-a83a-003018a02f3b}
{1852d4cd-4f48-11e2-a83a-003018a02f3b}
toolsdisplayorder {memdiag}
timeout 20
Windows 启动加载器
-------------------
标识符 {18422457-4f48-11e2-a83a-003018a02f3b} 注:这一串数据随机产生的,你的不会跟例子一样的。
device ramdisk=[boot]sourcesoot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path windowssystem32ootwinload.exe
description 启动 WinPE 3.0 (64位)
locale zh-cn
inherit {bootloadersettings}
osdevice ramdisk=[boot]sourcesoot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot windows
detecthal Yes
winpe Yes
ems Yes
Windows 启动加载器
-------------------
标识符 {1852d4cd-4f48-11e2-a83a-003018a02f3b}
device ramdisk=[boot]sourcesoot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path windowssystem32ootwinload.exe
description 启动 WinPE 3.0 (32位)
locale zh-cn
inherit {bootloadersettings}
osdevice ramdisk=[boot]sourcesoot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot windows
detecthal Yes
winpe Yes
ems Yes
Windows 启动加载器
-------------------
标识符 {default}
device ramdisk=[boot]sourcesoot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path windowssystem32ootwinload.exe
description 安装 Windows 7
locale zh-cn
inherit {bootloadersettings}
osdevice ramdisk=[boot]sourcesoot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot windows
detecthal Yes
winpe Yes
ems Yes
注意一下,启动 WinPE 3.0 (64位)和启动 WinPE 3.0 (32位)各自所在的段落的标识符是不一样的。下面会用到它。你编辑时,这些标识符不一定跟例子中的一样,不要照复制我这里例子中的标识符。
4、再建一个B.CMD文件,内容如下,并执行。注意,颜色蓝色表示64位的,绿色表示32位的,好让大家更容易理解。
set bcd_path=f:ootcd
set dev={7619dcc8-fafe-11d9-b411-000476eba25f}
REM 下面2行是X64的,bootpe_x64.wim表示将引导boot目录下的pe_x64.wim文件。
REM {18422457-4f48-11e2-a83a-003018a02f3b} 就是标识符,要跟上述查看BCD文件时要一致。
bcdedit /store %bcd_path% /set {18422457-4f48-11e2-a83a-003018a02f3b} device ramdisk=[boot]ootpe_x64.wim,%dev%
bcdedit /store %bcd_path% /set {18422457-4f48-11e2-a83a-003018a02f3b} osdevice ramdisk=[boot]bootpe_x64.wim,%dev%
REM 下面2行是X86的,bootpe_x86.wim表示将引导boot目录下的pe_x86.wim文件。
bcdedit /store %bcd_path% /set {1852d4cd-4f48-11e2-a83a-003018a02f3b} device ramdisk=[boot]bootpe_x86.wim,%dev%
bcdedit /store %bcd_path% /set {1852d4cd-4f48-11e2-a83a-003018a02f3b} osdevice ramdisk=[boot]ootpe_x86.wim,%dev%
pause
三、准备启动语言文件MUI
假定你安装的是WIN7系统(简体中文),制作的光盘带PE菜单也要简体中文的,到C:WindowsBootPCATzh-CN目录下复制bootmgr.exe.mui和memtest.exe.mui这两个文件到F:ootzh-cn目录下。如果你不介意使用英文菜单,本步骤可略过。
四、命名PE的WIM文件
根据上述BCD编辑的指令,64位PE的WIM文件必须命名为pe_x64.wim,32位PE的WIM文件必须命名为pe_x86.wim,这两个文件放在F:oot目录下。
五、制作ISO
用ULTRAISO打开WIN7安装盘的ISO文件,将F:BOOT目录替换进ISO文件的根目录。
六、其他
1、WIN8光盘带PE菜单做法类似。
2、EFI的菜单编辑做法类似。
3、如果仅是简体中文的光盘,boot目录中的fonts中的chs_boot.ttf、wgl4_boot.ttf要保留,其他的字体文件可删除。同样EFI目录下也有同样的字体文件可以删除的。boot目录内的其他文件不要随意删除。如,bootfix.bin缺失,将不会出现“按任意键启动DVD/CD”的提示,而是直接进入光盘(U盘)。
4、想了解bcdedit.exe的更多用法,命令提示符输入以下命令得到命令帮助。
bcdedit.exe /?
5、例子是添加双PE的,如果你只想添加一个PE,批处理中关于另一个PE的命令行去掉就可以了。