18.4 KB, 下载次数: 252, 下载积分: 无忧币 -2
0508 修正BUG
147.77 KB, 下载次数: 196, 下载积分: 无忧币 -2
0508 修正BUG
18.73 KB, 下载次数: 217, 下载积分: 无忧币 -2
2011-05-09 更新单文件封装版
148.44 KB, 下载次数: 146, 下载积分: 无忧币 -2
2011-5-14 更新
148.4 KB, 下载次数: 206, 下载积分: 无忧币 -2
修正显示BUG
19.3 KB, 下载次数: 224, 下载积分: 无忧币 -2
单文件封装版2011-5-26命令行终结
156.7 KB, 下载次数: 192, 下载积分: 无忧币 -2
ISO 启动映像,包含了BOOTSECT 命令行终结
14.91 KB, 下载次数: 138, 下载积分: 无忧币 -2
菜单版初步测试
14.77 KB, 下载次数: 289, 下载积分: 无忧币 -2
菜单版BUG修正
400 KB, 下载次数: 362, 下载积分: 无忧币 -2
ISO演示 附带UTF-8中文显示
94.7 KB, 下载次数: 310, 下载积分: 无忧币 -2
ISO演示,附带磁头数检查与修正程序
原帖由 sgw888 于 2011-5-8 18:17 发表
回复#14 。刷新步骤: MBR 部分,利用DD命令 把FD0 的 MBR52 或者MBR60 刷到HD0 或者HD1 。。。
DBR 部分,先判断出 格式来 然后也是用DD 命令 把FD0 的NT52 NT60 FAT52 FAT60 刷到(HD0,0)+1 打个比方。
但我 ...
400 KB, 下载次数: 135, 下载积分: 无忧币 -2
400 KB, 下载次数: 141, 下载积分: 无忧币 -2
284.56 KB, 下载次数: 132, 下载积分: 无忧币 -2
原帖由 sgw888 于 2011-5-8 22:29 发表
新建一个FBA文件,才能创建尾续文件。 因为我的U盘没有UD区。
创建尾续文件之后,通过管理,可以导入IMG。 然后,要关闭当前的框,才能双击那个文件进行编辑、
可是编辑之后,没有找到保存的按钮,退出之后, ...
原帖由 pseudo 于 2011-5-9 11:03 发表
命令行的东西,需要花时间学习其用法。
如果事先学,怕浪费时间,等遇到问题时可能忘了。
如果不事先学,到时当场学,手头没这个帖子,也不好掌握,毕竟这是危险操作。
建议楼主把主要功能部分做成菜单项。 ...
Snap1.jpg (31.48 KB, 下载次数: 149)
18.74 KB, 下载次数: 34, 下载积分: 无忧币 -2
3.85 KB, 下载次数: 50, 下载积分: 无忧币 -2
:_mbrsx
#先检查引导代码是不是msdos
if /i not %yddm%==msdos goto :_2mbrsx
echo
echo The msdos boot code : Update FAT32 partition DBR only.
####这个我没有看明白,难道是只能/dos mbr?不可以/nt52 mbr?
####这里应该需要有一个goto :end的吧??
3.92 KB, 下载次数: 42, 下载积分: 无忧币 -2
原帖由 sgw888 于 2011-5-10 08:53 发表
根据CHENALL 提示,只修复一处BUG。
另外,CHENALL 有些地方,改的地方,我看不懂。 从内存中取变量值的方法。实在搞不懂。
# 想把磁盘跟分区的参数输入检查代码合到一块,做一个公共代码
# 设置了一个变量csqzbz,用于调用时判断是检查 磁盘参数还是分区参数
# 输入检查,调用 :_cssrjc
# 说明,此处把整个批处理的第二个参数赋值给变量 cpfq
set cpfq=%2 && set csqzbz=partition && call :_cssrjc %cpfq%
if %jccg%==no goto :_2help
# 下面是继续执行的代码....
#以下为公共代码
:_cssrjc
set jcjg=
set csqz=%1 && set /a leng=*0x4cb00
#检查参数输入是磁盘还是分区
if /i %csqzbz%==partition && if not #%leng%==#7 set jccg=no
if /i %csqzbz%==disk && if not #%leng%==#5 set jccg=no
if /i not %csqz:~,3%==(hd set jccg=no
if /i not %cpfq:~-1%==) set jccg=no
if not exist jccg set jccg=yes
原帖由 sgw888 于 2011-5-10 20:02 发表
可能我上面没有表达明白。 第一部分为调用部分,第二部分为公共代码。
我想把磁盘跟分区参数的输入合并为一个公共部分。
然后,其它地方需要检查参数的 都 去调用这个 公共部分。
调用公共部分的时候,可 ...
3.1 KB, 下载次数: 34, 下载积分: 无忧币 -2
分区表判断:
代码初步构想
# :cpdqcw 磁盘读取错误
# :wxfq 无效分区表
dd if=(hd0)+1 of=(md)0x200+1 || goto :cpdqcw
checkrange 0x55 calc *0x401FE&0xff || goto :wxfq
checkrange 0xAA calc *0x401FF&0xff || goto :wxfq
checkrange 0x00 calc *0x401c2&0xff && goto :fq2jc
checkrange 0:62 read 0x401c6 && goto :err
set fqgs=1
:fq2jc
checkrange 0x00 calc *0x401d2&0xff && goto :fq3jc
checkrange 0:62 read 0x401d6 && goto :err
set fqgs=1
:fq3jc
checkrange 0x00 calc *0x401e2&0xff && goto :fq4jc
checkrange 0:62 read 0x401e6 && goto :err
set fqgs=1
:fq4jc
checkrange 0x00 calc *0x401f2&0xff && if not exist fqgs && goto :wxfq
checkrange 0:62 read 0x401f6 && goto :err
goto :ok
:err
echo
echo The (hd0) 1-62 sectors may be present data.
echo Clear Stop.
goto :end
:ok echo will clear....
:end
exit 1
# :cpdqcw 磁盘读取错误
# :wxfq 无效分区表错误
dd if=(hd0)+1 of=(md)0x200+1 || goto :cpdqcw
checkrange 0x55 calc *0x401FE&0xff || goto :wxfq
checkrange 0xAA calc *0x401FF&0xff || goto :wxfq
checkrange 0,0x80 calc *0x401be&0xff || goto :wxfq
checkrange 1:62 read 0x401c6 && goto :err
checkrange 0,0x80 calc *0x401ce&0xff || goto :wxfq
checkrange 1:62 read 0x401d6 && goto :err
checkrange 0,0x80 calc *0x401de&0xff || goto :wxfq
checkrange 0:62 read 0x401e6 && goto :err
checkrange 0,0x80 calc *0x401ee&0xff || goto :wxfq
checkrange 1:62 read 0x401f6 && goto :err
goto :ok
:err
echo
echo The (hd0) 1-62 sectors may be present data.
echo Clear Stop.
goto :end
:ok echo will clear....
:end
exit 1
3.29 KB, 下载次数: 22, 下载积分: 无忧币 -2
原帖由 木头人 于 2011-5-22 11:07 发表
如果写成DOS下运行多好。方便多了
另外帮助档写的太不明白了,测试半天,不知道怎么使用。
GRUB4DOS似乎连 CD 命令都没有,怎么切换到 boot/grub 目录下呢
1005 Bytes, 下载次数: 25, 下载积分: 无忧币 -2
#以下代码用于判断1-62扇区是否有数据
#可能代码段比较长,但是增加了安全性
set fqbkx=
cat --length=0 --hex %disk%+1 || goto :cpdqcw
dd if=%disk%+1 of=(md)0x200+1 || goto :cpdqcw
#以下用于检查分区表55AA标志
checkrange 0x55 calc *0x401fe&0xff || goto :wxfqb
checkrange 0xAA calc *0x401ff&0xff || goto :wxfqb
#0,80检查用于检查分区表是否有效
checkrange 0,0x80 calc *0x401be&0xff || goto :wxfqb
#分区起始LBA检查用于确定分区表项是否为空
checkrange 0 read 0x401c6 || set fqbkx=ok
checkrange 1:62 read 0x401c6 && goto :myzgkj
checkrange 0,0x80 calc *0x401ce&0xff || goto :wxfqb
checkrange 0 read 0x401d6 || set fqbkx=ok
checkrange 1:62 read 0x401d6 && goto :myzgkj
checkrange 0,0x80 calc *0x401de&0xff || goto :wxfqb
checkrange 0 read 0x401e6 || set fqbkx=ok
checkrange 1:62 read 0x401e6 && goto :myzgkj
checkrange 0,0x80 calc *0x401ee&0xff || goto :wxfqb
checkrange 0 read 0x401f6 || set fqbkx=ok
checkrange 1:62 read 0x401f6 && goto :myzgkj
if not exist fqbkx && goto :wxfqb
976 Bytes, 下载次数: 16, 下载积分: 无忧币 -2
原帖由 blithewind 于 2011-5-27 14:49 发表
这个工具很好,在命令行下操作方便呀.收入合盘了,感谢LZ等人的努力.
来点建议,可将各种常用的MBR数据用尾续法封装下,现在只有nt5、nt6的,类型太少了。
另外,应增加对MBR、DBR的备份与恢复功能.
原帖由 sgw888 于 2011-5-27 17:40 发表 回 blithewind :目前的功能够用了吧? 可以更新NT52 NT60 DOS的,你还想要什么的呢? 目前也就是XP,WIN7 DOS了吧?
749 Bytes, 下载次数: 34, 下载积分: 无忧币 -2
#主菜单框架
debug off
color white/blue blue/yellow light-red/blue 10
default 5
timeout 50
#0
title GRUB4DOS BOOTSECT
clear
#1
title
clear
#2
title Update MBR [Master Boot Record]
set czlx=mbr
configfile (fd9)/CHOOSE.LST
#3
title Update DBR [Partition Boot Record]
set czlx=dbr
configfile (fd9)/CHOOSE.LST
#4
title Clear Hard Disk 1-62 sectors
set czlx=clear
(fd9)/MENU.BAT
boot
#5
title Return BOOTSECT Main Menu
configfile (fd9)/MAIN.LST
#6
title Return GRUB4DOS Boot Menu
set *
map --unmap=9
map --rehook
configfile (md)4+8
#7
title GRUB4DOS Commandline
commandline
#8
title Reboot
reboot
#9
title Halt
halt
debug off
color white/blue blue/yellow light-red/blue 10
default 5
timeout 50
#0
title Choose Boot Code Type
clear
#1
title
clear
#2
title nt5x
set yddm=/nt52
(fd9)/MENU.BAT
boot
#3
title nt60
set yddm=/nt60
(fd9)/MENU.BAT
boot
#4
title dos
set yddm=/dos
(fd9)/MENU.BAT
boot
#5
title Return BOOTSECT Main Menu
configfile (fd9)/MAIN.LST
!BAT by sgw888
#主调用菜单
goto %czlx%
:clear
(fd9)/BOOTSEC clear %hddisk%
goto :end
:mbr
(fd9)/BOOTSEC %yddm% /mbr %hddisk%
goto :end
:dbr
(fd9)/BOOTSEC %yddm% %acpart%
:end
set nn=
set ac=
set gt=
set hdn=
set hdp=
set hddisk=
set acpart=
set czlx=
set yddm=
configfile (fd9)/main.lst
!BAT
# changelog 2011.05.25
# 考虑到U盘usb-hdd模式启动,(hd0)会被U盘占用,这在处理时要特别小心。
debug off
set ac=
set hdp=
set /a hdn=*0x475&0xff
calc %hdn% || clear && pause --wait=10 NO Harddisk && configfile (fd9)/main.lst
set /a nn=0
set /a gt=%hdn%+2
map --rd-base=0x40000 && map --rd-size=0x1000
echo debug off > (rd)+1
echo color white/blue blue/yellow light-red/blue 10 >> (rd)+1
echo default 2 >> (rd)+1
#0
echo title ==== please select Harddisk %@date% ==== >> (rd)+1
echo clear >> (rd)+1
#1
echo title >> (rd)+1
echo clear >> (rd)+1
#2
:hdd
echo title select hd%nn% >> (rd)+1
echo clear >> (rd)+1
echo echo hd%nn% harddisk Partition information: >> (rd)+1
echo echo >> (rd)+1
echo -e checkrange 0x80 read 0x82a0 \&\& echo If be USB-HDD Boot,your first harddisk may be U-Pan \&\& >> (rd)+1
echo geometry (hd%nn%) >> (rd)+1
echo echo >> (rd)+1
echo -e geometry (hd%nn%) \x3e (md)0x300+1 >> (rd)+1
echo -e set hddisk=(hd%nn%) >> (rd)+1
echo -e cat --locate=active (md)0x300+1 \| set ac= >> (rd)+1
echo -e if not exist ac \&\& if /i \x25czlx\x25==dbr \&\& pause --wait=10 NO Active Partition,DBR can not be updated! \&\& goto %gt% >> (rd)+1
echo -e if not exist ac \&\& echo NO Active Partition! >> (rd)+1
echo -e if not exist ac \&\& set /p sfzx=Do you want to continue?(y/n) >> (rd)+1
echo -e if not exist ac \&\& if /i #\x25sfzx\x25==#y \&\& (fd9)/MAINCALL >> (rd)+1
echo -e if not exist ac \&\& if /i not #\x25sfzx\x25==#y \&\& goto %gt% >> (rd)+1
echo -e set ac=0x\x25ac\x25 >> (rd)+1
echo -e set /a ac=\x25ac\x25-3 >> (rd)+1
echo -e cat --skip=\x25ac\x25 --length=1 (md)0x300+1 \| set hdp= >> (rd)+1
echo -e echo List Active Partition (hd%nn%,\x25hdp\x25) files: >> (rd)+1
echo echo >> (rd)+1
echo -e ls (hd%nn%,\x25hdp\x25)/ \|\| echo (hd\x25nn\x25,\x25hdp\x25) partition read error, unable to list files. >> (rd)+1
echo echo >> (rd)+1
echo -e set hddisk=(hd%nn%) >> (rd)+1
echo -e set acpart=(hd%nn%,\x25hdp\x25) >> (rd)+1
echo set /p ac=Whether correct for selected harddisk or Partition (y/n)? >> (rd)+1
echo -e if /i not \x25ac\x25==y goto %gt% >> (rd)+1
echo (fd9)/MAINCALL >> (rd)+1
echo kernel >> (rd)+1
set /a nn=%nn%+1
if not %nn%==%hdn% && goto :hdd
#变量gt 指向本菜单
#返回bootsect 主菜单
echo title Return BOOTSECT Main Menu >> (rd)+1
echo clear >> (rd)+1
echo configfile (fd9)/main.lst >> (rd)+1
configfile (rd)+1
exit
欢迎光临 无忧启动论坛 (http://wuyou.net/) | Powered by Discuz! X3.3 |