无忧启动论坛

标题: 改自lianjiang的批处理,将grub4dos装入win7/vista的BCD [打印本页]

作者: wowfans    时间: 2009-9-8 13:14
标题: 改自lianjiang的批处理,将grub4dos装入win7/vista的BCD
最近看lianjiang的帖子又被顶起来了
他的批处理很久都没有更新了
存在着一些缺点
故在他的版本基础上做了修改
以适应win7
同时最他的批处理做了些许修正

根据大家都意见进行了改动

1.  grldr.mbr文件名、安装到的分区可手动输入,如不输入直接回车,默认文件名为grldr.mbr,默认安装到的分区是有bcd文件的分区,当该分区是被隐藏的时候,默认是系统根分区,用户有输入时,采用用户输入的有效,可写入的分区

2. 原批处理中,卸载时,获取vid的方法不是很科学,比较繁琐,尤其是通过identifier这一串文本来判断vid,在不同版本的bcd中,不一样,英文的叫这个,中文的叫标识符,故采取了for /f跳过多少行的方式来获取已安装的vid,而与前面的说明是identifier还是标识符无关,原批处理在中文bcd中无法完成卸载,因为无法获取到vid
3. 其他细节上的改动,略



@echo off
cd /d %~dp0
del temp_bcd.txt >nul 2>nul
COLOR f9
set timeout=5
set gname=GRUB 4 DOS
set mbrname=grldr.mbr
set pingtime=5
rem pingtime是程序操作完成后的自动退出等待时间,调节与否随意,gname是bcd启动菜单显示名称,根据喜好可自己设置,mbrname是mbr的名称,可以自己改名,timeout是bcd菜单等待选择时间,自己随便调
set vid=
set destpart=
Set TIT=在bootmgr系统启动项中安装与卸载(grub4dos)项目的批处理
TITLE %TIT%
echo.
echo 检测权限...
bcdedit >temp_bcd.txt 2>nul
type temp_bcd.txt | find "Windows Boot Manager" >nul && goto gaosir
del temp_bcd.txt >nul 2>nul
echo 请在VISTA/WIN7/2008系统中以管理员身份运行,任意键退出.
pause>nul
exit
:gaosir
echo 权限检测已通过
set inputv=
echo.
echo 请输入你要安装/卸载的文件全名,若不输入直接回车采用默认值%mbrname%
echo 以下是扩展名为.mbr的文件列表,仅供参考
dir /a /b *.mbr
echo.
echo.
set /p inputv=输入安装/卸载项目的文件名,直接回车采用%mbrname%,可用TAB键选择或快速补齐:
if not "%inputv%"=="" set mbrname=%inputv%
echo.
echo.
set gname2=\%mbrname%
type temp_bcd.txt | find "%gname2%" >nul && goto un_bcd
if not exist %mbrname% echo 请注意,当前目录下没有%mbrname%文件,但仍可以继续安装,安装完成时会提示您将%mbrname%文件手动复制到您即将选择的安装盘中&pause
set defdest=%systemdrive%
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%i:\boot\bcd set defdest=%%i:&goto seldest
:seldest
set destpart=%defdest%
COLOR f9
set inputv=
echo.
echo 请输入%mbrname%文件的安装盘符,直接回车采用%destpart%盘根目录
echo 输入盘符时不用输入冒号,如D盘输入D或d即可
echo.
set /p inputv=输入盘符(不带冒号),直接回车默认%destpart%盘:  
if not "%inputv%"=="" set destpart=%inputv%:
if not exist "%destpart%\" goto patherr
md %destpart%\v7ts6qk9
if not exist "%destpart%\v7ts6qk9" goto writerr
rd "%destpart%\v7ts6qk9"
goto bcd_1
:patherr
color 0c
cls
echo 指定盘符%destpart%无效, 按任意键重新指定!!!
pause
goto seldest
:writerr
color 0c
cls
echo.
echo 指定盘不可写入, 可能为光驱, 请重新指定 !!!
pause
goto seldest
:bcd_1
bcdedit  /create /d "%gname%" /application bootsector >vid.ini
for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do set vida=%%i
for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do set vid={%%i}
bcdedit  /set %vid% device partition=%destpart%  >nul
bcdedit  /set %vid% path %gname2% >nul
bcdedit  /displayorder %vid% /addlast >nul
bcdedit  /timeout  %timeout% >nul
echo   BCD菜单项"%gname%"添加完成
if exist %mbrname% (
attrib %destpart%\%mbrname% -h -s -r >nul 2>nul
copy %mbrname% %destpart%\ /y
attrib %destpart%\%mbrname% +h +s +r
goto exit
) else (
echo   稍后请自行把%mbrname%拷贝到%destpart%\根目录
echo.
set /a pingtime=%pingtime%+8
Goto exit
)
:un_bcd
echo.
echo   Vista的BCD启动项中存在项目["%gname2%"]。
echo   ==============================================
echo.
set un_bcd=
Set /P un_bcd=  是否需要卸载%gname2%项目 ?[y/是  n/否]:
If /i %un_bcd%#==y# goto un_bcd_1
If /i %un_bcd%#==n# echo 卸载已取消...&goto exit
cls
echo.
echo 选择错误,请输入Y或者N(不分大小写)后继续
Goto un_bcd
:un_bcd_1
for /f "tokens=1 delims=:" %%i In ('findstr /n %gname2%  temp_bcd.txt') Do (
                 Set nid=%%i
)
set /a nid=%nid%-3
for /f "skip=%nid% tokens=2" %%i in (temp_bcd.txt) do set vid=%%i&goto vidok
:vidok
bcdedit /delete %vid% /cleanup >nul
bcdedit /timeout   %timeout% >nul
bcdedit >temp_bcd.txt
type temp_bcd.txt | find "%gname2%" >nul && goto un_bcd
echo 已成功卸载%gname2%项目
if exist %destpart%\%mbrname% (
      attrib -h -s -r %destpart%\%mbrname% >nul
      del %destpart%\%mbrname% >nul
)
:exit
del temp_bcd.txt >nul 2>nul
del temp_bcd1.txt >nul 2>nul
del vid.ini >nul 2>nul
echo %pingtime%秒后窗口自动关闭
ping -n %pingtime% 127.0.0.1 >nul

[ 本帖最后由 wowfans 于 2009-9-9 10:58 编辑 ]
作者: wowfans    时间: 2009-9-8 13:21
做成附件上传
解压后右击,选择以管理员身份运行

原则上支持以bootmgr启动的系统
例如win7/vista/win2008等

因为里面就用了findstr
for /f
cd /d %~dp0
以及bcdedit
常见命令
如果这些系统里面的这些命令语法都相同
自然是完全通用的了

压缩包中内置了grldr.mbr
2009-06-20的

g4d2bcd.rar (7.81 KB, 下载次数: 525)

[ 本帖最后由 wowfans 于 2009-9-9 10:59 编辑 ]
作者: good4buddy    时间: 2009-9-8 13:58
學習學習~~謝謝分享~~
作者: lelechina    时间: 2009-9-8 14:15
多谢楼主分享!收藏了!
作者: yanglin    时间: 2009-9-8 17:05
说白了就是将 grldr引导写入吧 呵呵呵

我给你来个 可以修改window界面的修改的工具算了!!

很小的!!我朋友汉化的!!

[ 本帖最后由 yanglin 于 2009-9-8 17:07 编辑 ]

Bcd汉化版(V系统或更高版本系统引导设置)..rar

51.77 KB, 下载次数: 471, 下载积分: 无忧币 -2


作者: lianjiang    时间: 2009-9-8 17:51
严重支持wowfans的安装批处理。
作者: lianjiang    时间: 2009-9-8 18:01
1.  修正以systemdrive变量来判断系统活动分区之类的,这样是不现实的,当vista/Win7安装在非活动主分区是,如果要在bcd中添加项目,自然也要将grldr.mbr加入到活动的主分区根目录下,而不是在系统分区根目录下,故采取对是否存在boot\bcd来进行判断,确定活动分区
-------------------------------------------
说明一点:
原批处理的处理方式是没问题的,相反你的处理方式可能会带来问题。
其它改进都同意。
作者: fujianabc    时间: 2009-9-8 18:14
不建议用for来查找bcd所在的分区,因为在vista/win7很多情况下bcd是放在隐藏分区中的:
1、vista在bit locker开启时bcd一般在隐藏分区中
2、win7 用默认安装方式bootmgr,bcd就放在隐藏分区中

所以grldr.mbr还是放在c:盘根目录下比较稳妥,然后bcdedit添加的项指向c:盘的grldr.mbr(bcdedit可以编辑隐藏分区中的bcd的)

另外附注一下,如果启动的激活分区为非隐藏分区,盘符记录在注册表中
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\bootdir

[ 本帖最后由 fujianabc 于 2009-9-8 18:16 编辑 ]
作者: xpxpxp1    时间: 2009-9-9 10:28
这个下载来后,不知干什么用?怎么用?
希望菜人不免谈,多少也要说一些(菜鸟遇此帖多少也是缘分)
作者: lianjiang    时间: 2009-9-9 10:50
原帖由 xpxpxp1 于 2009-9-9 10:28 发表
这个下载来后,不知干什么用?怎么用?
希望菜人不免谈,多少也要说一些(菜鸟遇此帖多少也是缘分)


看一下这两个帖子,可了解一些此贴的背景。

把grub4dos装入Vista启动项(非MBR)的批处理【10-22更新】
新版“Vista启动项中安装与卸载grub4dos项目的批处理”【10-22更新】


看后还不清楚干什么用的,再参看下帖:

grub4dos初级教程_CHM图文版【2009-04-11 最终更新】
作者: wowfans    时间: 2009-9-9 10:52
标题: 回复 #9 xpxpxp1 的帖子
在bootmgr的启动菜单中添加grub4dos
需要的文件有grldr.mbr和grldr文件

其中grldr.mbr文件放在跟批处理相同的目录
批处理会根据你的选择,安装到你指定的分区

grldr文件自己随便复制到任意分区根目录就可以了


其他信息参考grub4dos
作者: wjjwtt    时间: 2009-12-24 14:41
谢谢楼主分享哈。。。




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3