无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
301#
发表于 2011-1-3 18:07:41 | 只看该作者

回复 #300 sratlf 的帖子

同dos,一些简单功能;目前尚不支持%a:~-4,3%类的复杂用法,可能以后也不会考虑支持。
用法示例:
设置变量:set a=123
显示变量:set a
删除变量:set a=
引用变量:%a%

[ 本帖最后由 zxw 于 2011-1-3 18:16 编辑 ]
回复

使用道具 举报

302#
发表于 2011-1-3 19:01:10 | 只看该作者
原帖由 sratlf 于 2011-1-3 18:03 发表
0103增加变量支持看的不是很明白  有时间能否给个实例


GRUB4DOS_README

里面有详细的用法。

多多看看GRUB4DOS_README会有很多收获的。

目前已经问题。

1.会和wenv for命令起冲突。

[ 本帖最后由 chenall 于 2011-1-3 19:33 编辑 ]
回复

使用道具 举报

303#
发表于 2011-1-3 19:13:18 | 只看该作者
Grub4DOS 快要成 Grub as DOS 了
回复

使用道具 举报

304#
发表于 2011-1-3 19:56:46 | 只看该作者

回复 #302 chenall 的帖子

嘿嘿 抱歉 因为现在只能手机上网  暂时还没有下载新版grub
回复

使用道具 举报

305#
 楼主| 发表于 2011-1-4 17:03:41 | 只看该作者
C大该抽点时间,把CSPE更新下。现在条件都成熟了,该去掉DOS了。
回复

使用道具 举报

306#
发表于 2011-1-6 10:35:56 | 只看该作者
支持变量以后,好多脚本变得更精简并更加可读了更加好用了,真的是越来越DOS了,能不将多数DOS内部命令做进去?

另外想请教一个问题:我的一台机器总是将我的UD启动U盘的可见区识别为(fd0,0),因此我总是要检测fd0,0是否存在,如果存在,要先将fd0映射为hd0,才能启动可见区上的PE,否则会报ntdetec错误(这一点syslinux做不到因此启动总会报错),现在我是用ls (fd0,0)/ && map (fd0) (hd0)......不是很方便,有没有再简单的检测fd0,0是否存在的办法?
回复

使用道具 举报

307#
 楼主| 发表于 2011-1-6 10:59:44 | 只看该作者
UD启动,(bd)是ud区,()是可见区,即0x82a0值是否为0
checkrange 0x23 read 0x8280 && checkrange 0 read 0x82a0 && map (fd0) (hd0)......
回复

使用道具 举报

308#
发表于 2011-1-6 12:32:01 | 只看该作者

回复 #307 zhaohj 的帖子

我试一下,按理应该可以。
回复

使用道具 举报

309#
发表于 2011-1-6 14:19:35 | 只看该作者
请各位看一下如下代码:
  1. debug off
  2. set h3cd=H3CD3IN1.ISO
  3. set bd=hd
  4. checkrange 0x0 read 0x8280 && set bd=fd
  5. checkrange 0x9f read 0x8280 && set bd=cd
  6. checkrange 0x21 read 0x8280 && set bd=pd
  7. checkrange 0x23 read 0x8280 && set bd=ud
  8. if %bd%==ud checkrange 0 read 0x82a0 && map (fd0) (hd0) && map (hd0) (hd) && map --hook
  9. if %bd%==ud cat --length=0 (ud)/%h3cd% && goto 15
  10. if %bd%==ud cat --length=0 (ud)/%h3cd% || find /%h3cd% && goto 15
  11. timeout 30
  12. default 1
  13. find --set-root /BOOT/GRUB/U16HZ
  14. command --set-path=()/BOOT/GRUB/
  15. UNIFONT /BOOT/GRUB/U16HZ
  16. splashimage /BOOT/GRUB/BACK.XPM.GZ || background 0000ff && foreground ffffff
  17. title              ________________★系统维护菜单★________________
  18. clear
  19. title [01]--启动WinPE 2003              Boot WinPE 2003 included ext-Tools
  20. set peknl=WINPEIN.WIM
  21. set peldr=H3_LDRIN.BIN
  22. set pecfg=H3_IN
  23. if %bd%==pd pxe keep && chainloader --force /BOOT/H3_PXELD.0
  24. if %bd%==ud cat --length=0 (ud)/H3PE/%peknl% && goto 14
  25. chainloader /BOOT/%peldr%
  26. title [02]--启动Win7 PE                 Boot Win7 PE
  27. set peknl=W7PE.WIM
  28. set peldr=H3_MGRW7.BIN
  29. set pecfg=BW7
  30. if %bd%==pd pxe keep && chainloader --force /BOOT/H3_PXEMG.0
  31. if %bd%==ud cat --length=0 (ud)/H3PE/%peknl% && goto 14
  32. chainloader /BOOT/%peldr%
  33. title [03]--启动WinPE XP                Boot WinPE XP(No_RAM_model)
  34. set peldr=H3_LDRRM.BIN
  35. if %bd%==pd pause --wait=2 No_RAM_model PE not suport boot from network! && fallback 3
  36. chainloader /BOOT/%peldr%
  37. title [04]--MaxDos7 强化版              MaxDos7 Plus\n含多种DOS下的驱动和网克工具
  38. map --mem /BOOT/IMGS/MAXDOS.IMG (fd0)
  39. map --hook
  40. rootnoverify (fd0)
  41. chainloader +1
  42. title [05]--启动Windows NT/2K/XP        Boot Windows NT/2K/XP
  43. find --set-root --ignore-floppies --ignore-cd /ntldr
  44. map () (hd0)
  45. map (hd0) ()
  46. map --rehook
  47. find --set-root --ignore-floppies --ignore-cd /ntldr
  48. chainloader /ntldr
  49. title [06]--启动Vista/Win7/2008         Boot Vista/Win7/2008
  50. find --set-root --ignore-floppies --ignore-cd /bootmgr
  51. map () (hd0)
  52. map (hd0) ()
  53. map --rehook
  54. find --set-root --ignore-floppies --ignore-cd /bootmgr
  55. chainloader /bootmgr
  56. title [07]--通过仿真软盘启动硬盘系统    Boot XP/03/Vista/Win7/2008/VHD/RAM\n启动硬盘上的NT5.x/NT6.x包括以镜像方式存在于BOOT中的ramxp.img和windows7.vhd
  57. map --mem /BOOT/IMGS/NTBOOT.IMG (fd0)
  58. map --hook
  59. rootnoverify (fd0)
  60. chainloader +1
  61. title [08]--进入SRS_F6工具菜单          Goto SRS_F6 Tool\n装载额外的SRS磁盘驱动,驱动放任意盘的SRS目录
  62. configfile /BOOT/SRS_F6.LST || find --set-root /BOOT/SRS_F6.LST && configfile ()/BOOT/SRS_F6.LST
  63. title [09]--加载USB2.0驱动PLPBT.BIN     Load USB 2.0 moudle PLPBT.BIN\n适用老主板,装载后可进入主菜单再装载相应PE
  64. errorcheck off
  65. map (hd0) (hd)  && map --rehook
  66. errorcheck on
  67. kernel /BOOT/PLPBT.BIN
  68. title [10]--转(ISO/SYS/PXE)Linux        Goto (ISO/SYS/PXE)Linux Menu
  69. if %bd%==hd find --set-root /LDLINUX.SYS && chainloader +1
  70. if %bd%==cd chainloader --force /BOOT/ISOLINUX.BIN
  71. if %bd%==pd pxe keep && chainloader --raw /pxelinux.0
  72. if %bd%==ud find --set-root /LDLINUX.SYS && chainloader +1
  73. if %bd%==ud find --set-root /ldlinux.bin && chainloader --force /ldlinux.bin
  74. boot
  75. title [11]--转硬盘启动                  Boot HD0,0
  76. checkrange 0x80 read 0x8280 && map (hd0) (hd1) && map (hd1) (hd0) && map --rehook
  77. rootnoverify (hd0,0)
  78. chainloader +1
  79. title [12]--重启                        Reboot
  80. reboot
  81. title [13]--关机                        Shutdown
  82. halt
  83. #14 PE内置于UD内启动
  84. title
  85. clear
  86. map --mem /BOOT/IMGS/WMBOOT.IMA (fd0)
  87. map --hook
  88. pause --wait=0 Coping WimPE file,Please waiting...
  89. fat copy (ud)/H3PE/%peknl% (fd0)/H3PE/
  90. fat copy /BOOT/%peldr% (fd0)/BOOT/
  91. fat copy /BOOT/%pecfg% (fd0)/BOOT/
  92. fat copy /BOOT/NTDETECT (fd0)/BOOT/
  93. fat copy /BOOT/FONT.BIN (fd0)/BOOT/
  94. fat copy /BOOT/boot.sdi (fd0)/BOOT/
  95. rootnoverify (fd0) && chainloader (fd0)/BOOT/%peldr%
  96. #15 整体启动
  97. title
  98. clear
  99. map --mem (ud)/FIRADISK.IMA (fd0) || find --set-root /BOOT/IMGS/FIRADISK.IMA && map --mem /BOOT/IMGS/FIRADISK.IMA (fd0)
  100. map --mem (ud)/%h3cd% (0xff) || find --set-root /%h3cd% && map --mem /%h3cd% (0xff)
  101. map --hook
  102. rootnoverify (0xff) && chainloader (0xff)
复制代码
前面预执行区,好象不能用goto语句,这个语句的本意是,如果UD启动时,UD区或可见区有这个ISO则用这个ISO进行整体启动,后面的菜单也不用显示了。
如果不能用goto实现起来似乎有点麻烦。

看来预执行区与菜单区的地位还是不一样,现在if也实现了,是不是应该实现标号了。或者更进一步实现子程序调用!!!先还是把标号实现吧。chenall老大加油!
g4d实现了变量也是一个大的飞跃!

[ 本帖最后由 hhh333 于 2011-1-6 14:27 编辑 ]
回复

使用道具 举报

310#
 楼主| 发表于 2011-1-6 15:25:05 | 只看该作者
标号只能用在批处理;
if %bd%==ud cat --length=0 (ud)/%h3cd% && goto 15改成下面呢?
if %bd%==ud cat --length=0 (ud)/%h3cd% && default 15 && timeout 0
另把default 1 及 timeout 30上移
回复

使用道具 举报

311#
发表于 2011-1-6 15:41:28 | 只看该作者

回复 #310 zhaohj 的帖子

也是,用default来弄
回复

使用道具 举报

312#
发表于 2011-1-6 16:14:18 | 只看该作者
菜单里面的标号就没有必要了吧,直接使用goto 指定的菜单来实现。
比较复杂的用批处理更方便。
回复

使用道具 举报

313#
发表于 2011-1-6 16:35:46 | 只看该作者

回复 #312 chenall 的帖子

菜单里还是有必要实现标号的,不然修改确实不便,增减了菜单项,goto后的号都要变。
回复

使用道具 举报

314#
发表于 2011-1-6 20:30:49 | 只看该作者
@chenall:
新旧两种变量有冲突?
回复

使用道具 举报

315#
发表于 2011-1-6 20:50:13 | 只看该作者
可能是grub4dos 内置SET命令的bug,我查一下。

变量名使用两个字符看一下..

[ 本帖最后由 chenall 于 2011-1-6 20:52 编辑 ]
回复

使用道具 举报

316#
发表于 2011-1-6 21:03:59 | 只看该作者
哦,明白了,你应该是用TUXW版的WENV。

我没有考虑到这个情况,因为TUXW增强版的初始化WENV变量位置不一致。

你可以试试先用TUXW版的WENV设置变量再用原版的WENV读可能就读不出来了。

我稍后看一下TUXW版的源码,看看能不能解决。
回复

使用道具 举报

317#
发表于 2011-1-6 21:04:24 | 只看该作者

回复 #315 chenall 的帖子

用原版,两个字符也一样。..

[ 本帖最后由 zxw 于 2011-1-6 21:49 编辑 ]
回复

使用道具 举报

318#
发表于 2011-1-6 21:51:48 | 只看该作者

回复 #316 chenall 的帖子

才测试了一下,TUXW版和原版wenv 可以互读变量。
回复

使用道具 举报

319#
发表于 2011-1-6 22:00:27 | 只看该作者
你是怎么试的,不可能的。

另外新版的GRUB4DOS已经上传了,兼容TUXW版的WENV(只支持标准变量,即使用SET命令设设置的变量)。
回复

使用道具 举报

320#
发表于 2011-1-6 22:10:57 | 只看该作者

回复 #319 chenall 的帖子

抱歉,清除temp文件夹后再测试,你是对的。
用原版wenv测试我写的那个脚本,开始就出错,晕!

[ 本帖最后由 zxw 于 2011-1-6 22:25 编辑 ]
回复

使用道具 举报

321#
发表于 2011-1-7 10:35:24 | 只看该作者

回复 #312 chenall 的帖子

能不能让goto语句在预执行区也能运行,我前面提的问题,用default和time基本可以做到,但预执行区的其他语句会执行,就导致屏幕背景显示,如果iso较大,则会停留一段时间,不美观
回复

使用道具 举报

322#
发表于 2011-1-7 11:02:30 | 只看该作者
不行。菜单的goto实际上是直接调用fallback的。

菜单就尽量不要goto了。

如果菜单比较复杂建议用批处理。
回复

使用道具 举报

323#
发表于 2011-1-7 11:11:58 | 只看该作者

回复 #322 chenall 的帖子

实际上菜单也不复杂,就是在预执行区进行一些判断,如果满足某个条件就直接执行某些语句,后续的语句就不执行了后续的菜单也不显示了,这种需求应该还是有的。就如上面的菜单,意思就是如果发现有整体启动的ISO文件,就不显示菜单并立即MAP出盘再启动,显然后面的显示背景的语句也不必执行了,反正ISO整体启动后会出菜单。

当然目前似乎有三种方法
1、改变default time定位到要执行的语句。不足之处前面已经说了
2、直接configfile到另一个菜单。如果只有一个菜单项似乎了不大好,而且要增加一个文件。
3、干脆用批处理。似乎也要增加批处理文件。

[ 本帖最后由 hhh333 于 2011-1-7 11:15 编辑 ]
回复

使用道具 举报

324#
发表于 2011-1-7 11:15:24 | 只看该作者
那就是把要启动的命令全部写在一行上面直接启动,也就达到效果了。
回复

使用道具 举报

325#
发表于 2011-1-7 11:17:47 | 只看该作者

回复 #324 chenall 的帖子

后面如果有些判断语句就不好写一行了。
回复

使用道具 举报

326#
 楼主| 发表于 2011-1-7 12:51:59 | 只看该作者
转贴:

一些初学者朋友对于shift命令感到非常的困惑,抱怨网上的一些shift命令教程很难理解。为了解决这个问题,于是我就写了一下这个
“超生游击队”教程以供初学者朋友参考。

言归正传,比如我老爸有10个儿子,我英雄是第10个。

第一步:
我们现在用一个另类的办法输出10个儿子的名字,将如下代码保存为hero.bat。
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
pause
如何运行呢?我们可以另写一个bat,内容是:call hero.bat 老大 老二 老三 …… 英雄
也就是调用hero.bat并共带10个参数!
能正确运行吗?不能,很遗憾,因为根本没有%10。


第二步:
在上一步中没有输出我英雄的大名,那难道我英雄就不是我老爸的儿子吗!我得想个办法把我的名字也输出来。
好了,借助shift命令就可以达到。我们把hero.bat中的代码改一下。
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
shift
echo %9
pause
终于我的大名输出了。可是英雄明明是第10个参数呀,怎么现在变成第9个了?
这个就是shift的功能.

也就是,执行shift命令以后,原来的%9变成了%8,原来的%8变成了%7,原来的%7变成了%6……而原来的%1变成了%0,此时原来的%0没了。
也就是说后面的参数依次冲掉了前面的参数,而为了输出我的名字,最终牺牲了%0。


第三步:
我老爸又认了4个干儿子,名字分别为a,b,c,d
到此,我老爸有多了4个干儿子。共14个儿子。

在调用hero.bat时又多了4个参数,则运行hero.bat时有:call hero.bat 老大 老二 老三 …… 英雄 a b c d
(注意:要把省略号换成名字。)


此时,hero.bat的代码如下:(最容易理解的方法)

@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
shift
echo %9
::现在的%9是英雄

shift
echo %9
::现在的%9是a

shift
echo %9
::现在的%9是b

shift
echo %9
::现在的%9是c

shift
echo %9
::现在的%9是d

pause
回复

使用道具 举报

327#
发表于 2011-1-7 13:13:38 | 只看该作者
原帖由 zhaohj 于 2011-1-7 12:51 发表
转贴:

一些初学者朋友对于shift命令感到非常的困惑,抱怨网上的一些shift命令教程很难理解。为了解决这个问题,于是我就写了一下这个
“超生游击队”教程以供初学者朋友参考。

言归正传,比如我老爸有1 ...


不错,呵呵,很生动的表达了shift命令

顺便说一下。有了shift命令我们就可以在某些情况下使用批处理代替for的功能

例子:模拟简单的for功能。(更多的用法可以看一下MODBOOT,里面的好几个类拟的用法)
MODBOOT只使用了一个外部命令FAT,其它的都是内置的功能。


  1. !BAT
  2. call :test_for 1 2 3 4 5 6 7 8 9 10
  3. exit

  4. :test_for
  5. if "%1"=="" goto :eof
  6. echo %1
  7. shift
  8. goto :test_for
复制代码

[ 本帖最后由 chenall 于 2011-1-7 13:17 编辑 ]
回复

使用道具 举报

328#
发表于 2011-1-7 19:00:30 | 只看该作者
有个问题请教下C大:尝试应用本子版下的两个批处理run简化菜单 无法在使用光标键激活菜单项(类似title clear) 只能按行号选择 这个能改进吗
另外 变量能用于菜单的任意处如title中就更好了
回复

使用道具 举报

329#
发表于 2011-1-7 19:26:17 | 只看该作者
原帖由 blithewind 于 2011-1-7 19:00 发表
有个问题请教下C大:尝试应用本子版下的两个批处理run简化菜单 无法在使用光标键激活菜单项(类似title clear) 只能按行号选择 这个能改进吗
另外 变量能用于菜单的任意处如title中就更好了


菜单后面加一个boot就可以选择了。加上了也没有什么影响,不管有没有boot命令启动时总是会执行的。

菜单支持变量会比较麻烦,过一段时间再研究下。

当然了如果是运态生成的菜单就没影响了。
回复

使用道具 举报

330#
发表于 2011-1-7 22:31:15 | 只看该作者
看了一下今天的新版,SET命令添加了/a参数,呵呵,相信/p参数也不远了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-25 18:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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