无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 13141|回复: 44
打印 上一主题 下一主题

关于用BCDEDIT建立BCD的问题

[复制链接]
跳转到指定楼层
1#
发表于 2010-5-4 19:09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为在VM下面试了N次不成功,所以想问一下大家是我的命令有问题还是其它的问题?

说明一下我的VM测试环境,C盘安装了XP,WIN7.VHD放在D盘子目录里面,用以下CMD去建立C盘的BCD文件,试了N次都失败,启动菜单是有的,可以看到,就是无法进VHD,不知道是什么原因。。。。。。。

@ECHO OFF
@CD /D "%~DP0"
@ATTRIB -R -A -S -H "%~DP0BOOTMGR"
IF NOT EXIST "C:\BOOTMGR" @COPY /Y /V "%~DP0BOOTMGR" "C:\" >NUL
@ATTRIB -R +A +S +H "C:\BOOTMGR"
IF NOT EXIST "C:\BOOT\" @MD "C:\BOOT\"
@ATTRIB -R +A +S +H "C:\BOOT"
IF EXIST "C:\BOOT\BCD" @COPY /Y /V "C:\BOOT\BCD" "C:\BOOT\BCD_BAK" >NUL
IF EXIST "C:\BOOT\BCD" @DEL /F /A /Q "\\?\C:\BOOT\BCD" >NUL
BOOTSECT.EXE /NT60 "C:" /FORCE /MBR >NUL
BCDEDIT.EXE /CREATESTORE "C:\BOOT\BCD" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /CREATE {BOOTMGR} /D "Windows Boot Manager" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {BOOTMGR} DEVICE PARTITION="C:" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {BOOTMGR} LOCALE "zh-CN" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /CREATE {NTLDR} /D "Microsoft Windows XP Professional" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {NTLDR} DEVICE PARTITION="C:" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {NTLDR} PATH "\NTLDR" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /DISPLAYORDER {NTLDR} /ADDFIRST >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /DEFAULT {NTLDR} >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {BOOTMGR} TIMEOUT "9" >NUL
@SET VID=
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /CREATE /D "%~DP0WIN7.VHD" /APPLICATION OSLOADER >"%TEMP%\VID.TXT"
FOR,/F,"TOKENS=2 DELIMS={",%%I,IN (%TEMP%\VID.TXT) DO (SET VIDA=%%I)
FOR,/F,"TOKENS=1 DELIMS=}",%%I,IN ("%VIDA%") DO (SET VID={%%I})
ECHO %VID%>"%TEMP%\VID.TXT"
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% DEVICE VHD="[%~D0]%~P0WIN7.VHD" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% PATH "\WINDOWS\SYSTEM32\WINLOAD.EXE" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% LOCALE "zh-CN" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% SYSTEMROOT "\WINDOWS" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% NX "OptIn" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% OSDEVICE VHD="[%~D0]%~P0WIN7.VHD" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% DETECTHAL ON >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /DISPLAYORDER %VID% /ADDLAST >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /TIMEOUT 9 >NUL
@DEL /F /A /Q "%TEMP%\VID.TXT" >NUL
PAUSE

另外,如果用一个建立好的BCD是没问题的,下面这个是我拿别的BCD改好的“空的”的BCD,体积只有8K,如果用这个BCD,然后用以下命令行,可以正常进入VHD,经过多次的对比,发现自己创立出来的BCD与用这个现有BCD建立出来的BCD用BcdTool查看是一样的。。。但自己建立的就不无法进VHD,郁闷了。。。。。。。。。请大家帮忙看一下,多谢了。。。。。。。。。。

@ECHO OFF
@CD /D "%~DP0"
@ATTRIB -R -A -S -H "%~DP0BOOTMGR"
IF NOT EXIST "C:\BOOTMGR" @COPY /Y /V "%~DP0BOOTMGR" "C:\" >NUL
@ATTRIB -R +A +S +H "C:\BOOTMGR"
IF NOT EXIST "C:\BOOT\" @MD "C:\BOOT\"
@ATTRIB -R +A +S +H "C:\BOOT"
IF EXIST "C:\BOOT\BCD" @COPY /Y /V "C:\BOOT\BCD" "C:\BOOT\BCD_BAK" >NUL
@COPY /Y /V "%~DP0BCD_BAK" "C:\BOOT\BCD" >NUL
@ATTRIB -R -A -S -H "C:\BOOT\BCD"
BOOTSECT.EXE /NT60 "C:" /FORCE /MBR >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /CREATE {NTLDR} /D "Microsoft Windows XP Professional" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {NTLDR} DEVICE PARTITION="C:" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {NTLDR} PATH "\NTLDR" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /DISPLAYORDER {NTLDR} /ADDFIRST >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /DEFAULT {NTLDR} >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET {BOOTMGR} TIMEOUT "9" >NUL
@SET VID=
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /CREATE /D "%~DP0WIN7.VHD" /APPLICATION OSLOADER >"%TEMP%\VID.TXT"
FOR,/F,"TOKENS=2 DELIMS={",%%I,IN (%TEMP%\VID.TXT) DO (SET VIDA=%%I)
FOR,/F,"TOKENS=1 DELIMS=}",%%I,IN ("%VIDA%") DO (SET VID={%%I})
ECHO %VID%>"%TEMP%\VID.TXT"
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% DEVICE VHD="[%~D0]%~P0WIN7.VHD" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% PATH "\WINDOWS\SYSTEM32\WINLOAD.EXE" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% LOCALE "zh-CN" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% SYSTEMROOT "\WINDOWS" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% NX "OptIn" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% OSDEVICE VHD="[%~D0]%~P0WIN7.VHD" >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /SET %VID% DETECTHAL ON >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /DISPLAYORDER %VID% /ADDLAST >NUL
BCDEDIT.EXE /STORE "C:\BOOT\BCD" /TIMEOUT 9 >NUL
@DEL /F /A /Q "%TEMP%\VID.TXT" >NUL

[ 本帖最后由 0cat0 于 2010-5-7 12:10 编辑 ]

BCD_BAK[8K].rar

915 Bytes, 下载次数: 93, 下载积分: 无忧币 -2

2#
发表于 2010-5-4 19:55:39 | 只看该作者
你把你的不能启动的bcd放上来看看。
还有不能启动时提示信息是什么?
回复

使用道具 举报

3#
 楼主| 发表于 2010-5-4 20:09:24 | 只看该作者
原帖由 fujianabc 于 2010-5-4 19:55 发表
你把你的不能启动的bcd放上来看看。
还有不能启动时提示信息是什么?


这是出错截图:


附件是不能进VHD的BCD:

BCD不能进VHD.rar

1.78 KB, 下载次数: 78, 下载积分: 无忧币 -2

回复

使用道具 举报

4#
发表于 2010-5-4 20:16:45 | 只看该作者
Windows 启动加载器
-------------------
标识符                  {dcacadb2-5774-11df-aea2-000c298e488f}
device                  vhd=[D:]\My_BOOT\WIN7.VHD
path                     \WINDOWS\SYSTEM32\WINLOAD.EXE
inherit                 {bootloadersettings}
description             vhdwindows7
locale                  zh-CN
osdevice                vhd=[D:]\My_BOOT\WIN7.VHD
systemroot              \WINDOWS
nx                      OptIn
detecthal               Yes

[ 本帖最后由 yueyezhan 于 2010-5-4 20:20 编辑 ]
回复

使用道具 举报

5#
发表于 2010-5-4 20:26:07 | 只看该作者
Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  unknown
description             Windows Boot Manager
locale                  zh-CN
default                 {ntldr}
displayorder            {ntldr}
                        {dcacadb2-5774-11df-aea2-000c298e488f}
timeout                 9

Windows 旧 OS 加载器
------------------------
标识符                  {ntldr}
device                  unknown
path                    \NTLDR
description             Microsoft Windows XP Professional

Windows 启动加载器
-------------------
标识符                  {dcacadb2-5774-11df-aea2-000c298e488f}
device                  locate=\WINDOWS\SYSTEM32\WINLOAD.EXE
path                    \WINDOWS\SYSTEM32\WINLOAD.EXE
description             D:\My_BOOT\WIN7.VHD
locale                  zh-CN
osdevice                locate=\WINDOWS
systemroot              \WINDOWS
nx                      OptIn
detecthal               Yes

这个是你传上来的bcd的内容,条目对应的内容错乱了
回复

使用道具 举报

6#
发表于 2010-5-4 20:31:46 | 只看该作者
看5楼的,楼主的device和osdevice都不对。

应该像4楼那样才对。
回复

使用道具 举报

7#
 楼主| 发表于 2010-5-4 20:38:48 | 只看该作者
先多谢大家的回复,BCD不对是一定的,但我是想找出我的命令行哪出错了,怎么会建立出来的BCD会这样?错在哪呢?我自己看了很久没看出来,还请麻烦大家指出来。。。。。。。。。

[ 本帖最后由 0cat0 于 2010-5-4 20:40 编辑 ]
回复

使用道具 举报

8#
发表于 2010-5-4 21:47:03 | 只看该作者
好像是device 不支持你在批命令里那样写,你在@SET VID=上面一行加上set drive=%~D0
然后把DEVICE和OSDEVICE的VHD="[%~D0]替换成VHD="[%drive%]试试
回复

使用道具 举报

9#
 楼主| 发表于 2010-5-5 01:39:21 | 只看该作者

回复 #8 yueyezhan 的帖子

这个写法应该没问题呀,我现在用单系统XP的实机运行了第一个CMD,显示是正常的,又新建了一下VM测试了一下也是正常的,郁闷了。。。。。。。。。。可能是原来的VM有问题,等明天去那台机子上重做一下VM里面的系统再试一下看有没有问题。。。。。

上截图:

[ 本帖最后由 0cat0 于 2010-5-5 01:48 编辑 ]

2010-05-05_014337.png (51.85 KB, 下载次数: 145)

2010-05-05_014337.png

2010-05-05_014517.png (39.64 KB, 下载次数: 167)

2010-05-05_014517.png

2010-05-05_014615.png (50.77 KB, 下载次数: 160)

2010-05-05_014615.png
回复

使用道具 举报

10#
 楼主| 发表于 2010-5-5 01:51:08 | 只看该作者
另外想问一下,上面截图最后一张,右边那个
device                  unknown

用什么命令可以建立,自己怎么弄都弄不出来这个。。。。。。。。。
回复

使用道具 举报

11#
发表于 2010-5-5 02:06:46 | 只看该作者
你如果只直接拷贝的bcd出来,好像就是unknown,大概表示是一个未知或者不存在的分区吧;你用bcdedit /export导出的就会保持原来的内容
回复

使用道具 举报

12#
 楼主| 发表于 2010-5-5 09:56:51 | 只看该作者
还是找不出问题出在哪???

再次上传两个BCD,一个是好的,一个是坏的,我对比过,但怎么也找不出问题,请大家帮忙看看问题出错在哪了?

发现个问题,这两个文件用以下命令查看,在VM有实机不一样的,直接上图:

BCDEDIT.EXE /STORE "BCD_OK" /ENUM  ACTIVE >BCD_OK.TXT.TXT
BCDEDIT.EXE /STORE "BCD_BAD" /ENUM  ACTIVE >BCD_BAD.TXT.TXT

2010-05-05_095503.png (31.07 KB, 下载次数: 126)

2010-05-05_095503.png

2010-05-05_095506.png (30.65 KB, 下载次数: 121)

2010-05-05_095506.png

2010-05-05_095543.png (38.82 KB, 下载次数: 136)

2010-05-05_095543.png

BAD.rar

2.7 KB, 下载次数: 60, 下载积分: 无忧币 -2

回复

使用道具 举报

13#
发表于 2010-5-5 22:34:49 | 只看该作者
除了GUID号之外基本没什么差别,我用regedit把两个bcd倒成注册表格式,然后比较,只有蓝框所画的一处差别。




[ 本帖最后由 fujianabc 于 2010-5-5 22:57 编辑 ]
回复

使用道具 举报

14#
发表于 2010-5-5 22:57:50 | 只看该作者
看了一下几台nt6.x的机子(包括vista,2008 ,win7)硬盘上的bcd都有system=1这个项目。而安装光盘的bcd则没有system这一项。
估计安装程序用这一项来判断安装目标和安装源的bcd的(比如从移动硬盘安装,安装程序就通过这一项来确定要更改那个bcd)
回复

使用道具 举报

15#
 楼主| 发表于 2010-5-6 00:07:24 | 只看该作者

回复 #14 fujianabc 的帖子

多谢回复,想问一下,怎么用REG导出来的?还有,要怎么添加一项?

因为我从命令行建立出来的BCD都不行,估计是我用的命令有错,但我找不到出错的地方,fujianabc 大大能给个用命令行建立正常的BCD的例子吗?

[ 本帖最后由 0cat0 于 2010-5-6 00:11 编辑 ]
回复

使用道具 举报

16#
发表于 2010-5-6 08:54:45 | 只看该作者
原帖由 0cat0 于 2010-5-6 00:07 发表
多谢回复,想问一下,怎么用REG导出来的?还有,要怎么添加一项?

因为我从命令行建立出来的BCD都不行,估计是我用的命令有错,但我找不到出错的地方,fujianabc 大大能给个用命令行建立正常的BCD的例子吗?

bcd文件就是注册表格式,可以直接挂在注册表上。默认情况下,系统的bcd挂在hklm\BCD00000000下

那个system项貌似无法用bcdedit添加。

建议你别这么麻烦了,直接准备一个可用的bcd(bcd_ok),然后批处理中就加入复制bcd文件然后用bcdedit修改device和osdevice即可。

[ 本帖最后由 fujianabc 于 2010-5-6 08:56 编辑 ]
回复

使用道具 举报

17#
 楼主| 发表于 2010-5-6 09:33:38 | 只看该作者

回复 #16 fujianabc 的帖子

太感谢了,现在知道怎么导入注册表了,呵呵。。。。。。。。

我现在就是直接拿个好的BCD,然后修改的,本来是想自己建一个新的,这样应该会比较少垃圾,现在看来只能拿好的修了,等以后有方法了再改。。。。。。。。

再次多谢 fujianabc 大大的帮助。。。。。。。。。。。。。

现在可能开始折腾“免sysprep”了。。。。。。。。。。。。
回复

使用道具 举报

18#
 楼主| 发表于 2010-5-6 11:27:22 | 只看该作者
试了一下,正常的“空的”BCD只要下面注册表几项就OK了:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\11111111]

[HKEY_LOCAL_MACHINE\11111111\Description]
"KeyName"="BCD00000000"
"System"=dword:00000001

[HKEY_LOCAL_MACHINE\11111111\Objects]

[HKEY_LOCAL_MACHINE\11111111\Objects\{9dea862c-5cdd-4e70-acc1-f32b344d4795}]

[HKEY_LOCAL_MACHINE\11111111\Objects\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\Description]
"Type"=dword:10100002

[HKEY_LOCAL_MACHINE\11111111\Objects\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\Elements]

[HKEY_LOCAL_MACHINE\11111111\Objects\{9dea862c-5cdd-4e70-acc1-f32b344d4795}\Elements\12000004]
"Element"="Windows Boot Manager"

点评

Ar...Sorry.中文不好,要求大家原諒.. 我是說 might be You should Say "COPY" {current} ,not "Create" {boot loader} The concept is copy {這個使用中的ID的內容} \>Bcdedit /copy {current} /d "M  详情 回复 发表于 2013-9-22 05:08
回复

使用道具 举报

19#
发表于 2010-5-6 13:08:55 | 只看该作者
楼主,3#中提到的问题你解决了吗?如已解决,麻烦提供一下方法步骤,谢谢!
回复

使用道具 举报

20#
 楼主| 发表于 2010-5-6 13:31:55 | 只看该作者
原帖由 tdq868xin 于 2010-5-6 13:08 发表
楼主,3#中提到的问题你解决了吗?如已解决,麻烦提供一下方法步骤,谢谢!


解决了,那个问题是因为菜单有问题,就是上面 fujianabc 大大说的少了一项“system=1”

解决的办法就是按上面说的,自己先建立一个或找一个可以用的BCD,然后修改为自己要的菜单项就行了。。。。

上传一个自己建的“空的:只有8K的BCD吧

[ 本帖最后由 0cat0 于 2010-5-6 13:37 编辑 ]

BCD_OK_BAK.rar

835 Bytes, 下载次数: 131, 下载积分: 无忧币 -2

点评

混沌剑神 www.aoswx.com/book/991.html 永生之门www.gmwxw.com/book/4185.html  发表于 2014-9-26 17:20
回复

使用道具 举报

21#
发表于 2010-5-7 09:37:53 | 只看该作者

回复 #20 0cat0 的帖子

下载楼主的BCD文件然后加入菜单试了一下,没有成功。
请问: BCD文件如何导入注册表的?
回复

使用道具 举报

22#
 楼主| 发表于 2010-5-7 10:29:03 | 只看该作者

回复 #21 tdq868xin 的帖子

不会吧,这个我在VM和实机上面都试过了,没有问题呀,这个是空的,里面没有启动项的,一定要自己加项目,如果是想启动VHD,最少要以下几项,不然启动出错:

BCDEDIT.EXE /CREATE /D "X:\XXX.VHD" /APPLICATION OSLOADER
BCDEDIT.EXE /SET "XXX.VHD.ID" DEVICE "VHD=[X:]\XXX.VHD"
BCDEDIT.EXE /SET "XXX.VHD.ID" PATH "\WINDOWS\SYSTEM32\WINLOAD.EXE"
BCDEDIT.EXE /SET "XXX.VHD.ID" OSDEVICE "VHD=[X:]\XXX.VHD"
BCDEDIT.EXE /SET "XXX.VHD.ID" SYSTEMROOT "\WINDOWS"
回复

使用道具 举报

23#
发表于 2010-5-7 10:45:43 | 只看该作者

回复 #22 0cat0 的帖子

detecthal  yes
这一项不要?
另外,我是用grldr引导bootmgr的,我有些怀疑是这个原因,因为本机(实机)直接从bootmgr引导是正常的,同样的BCD文件,移到U盘上通过grldr引导bootmgr安装就出现3#的提示。
回复

使用道具 举报

24#
 楼主| 发表于 2010-5-7 10:46:42 | 只看该作者
如果还不行,可以用这个帖子里面的CMD试试,

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1

因为我测试的时候用的就是这两个CMD
回复

使用道具 举报

25#
 楼主| 发表于 2010-5-7 10:49:02 | 只看该作者

回复 #23 tdq868xin 的帖子

U盘启动还在还没有折腾过,detecthal  yes应该要,U盘还要改注册表,请看下面的帖子:

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D3
回复

使用道具 举报

26#
 楼主| 发表于 2010-5-7 10:53:54 | 只看该作者

回复 #21 tdq868xin 的帖子

对了,还没说怎么导入注册表,呵呵,BCD文件是注册表格式我也是听了fujianabc 大大说了才知道的,直接在hklm上面点加载,然后输入名字就可以导入了,想改的话改一下权限,改完卸载就行了。。。。。。。。

你可以导入你在U盘启动不了的BCD到注册表里面看一下, 是不是有SYSTEM=1这项。。。。。。。。

[ 本帖最后由 0cat0 于 2010-5-7 10:55 编辑 ]
回复

使用道具 举报

27#
发表于 2010-5-7 11:56:54 | 只看该作者

回复 #26 0cat0 的帖子

谢谢,已经看到加载配置文件了
有“SYSTEM=1”
暂时仍未成功
回复

使用道具 举报

28#
发表于 2010-5-7 12:01:16 | 只看该作者
原帖由 tdq868xin 于 2010-5-7 10:45 发表
detecthal  yes
这一项不要?
另外,我是用grldr引导bootmgr的,我有些怀疑是这个原因,因为本机(实机)直接从bootmgr引导是正常的,同样的BCD文件,移到U盘上通过grldr引导bootmgr安装就出现3#的提示。

第一次启动时,bcd文件必须位于系统所在硬盘的激活住分区上,其他分区/设备都不行。

如果你的bcd文件在u盘,系统在硬盘上肯定出现3楼的错误。

如果你整个系统和bcd都在u盘上,则不会有问题。
回复

使用道具 举报

29#
发表于 2010-5-7 12:06:03 | 只看该作者

回复 #28 fujianabc 的帖子

谢谢 fujianabc和 0cat0的解答
vmware里已经正常
启动文件放在U盘,VHD放在本机硬盘失败,原因应该就是fujianabc大大提到的“第一次启动时,bcd文件必须位于系统所在硬盘的激活住分区上,其他分区/设备都不行。”
回复

使用道具 举报

30#
发表于 2010-5-7 12:08:28 | 只看该作者
bcd文件应与启动的VHD文件应在同一硬盘(或移动存储设备),并且BCD文件所在分区为激活分区,
fujianabc大大,不知我的理解是否正确。
如果是双硬盘,启动文件在A磁盘,VHD在另一磁盘B上,那样也不能正常安装了,太不人性化了,呵呵!

[ 本帖最后由 tdq868xin 于 2010-5-7 12:18 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 13:21

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表