无忧启动论坛

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

[求助] 在BAT中加入启用VBE的中文支持的语句会出现死循环(17楼问题)

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-15 15:44:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原来的GRLDR菜单如下:
  1. !BAT
  2. checkrange 0x21 read 0x8280 && if not "%menuflpe:~-4%"==".flp" pxe detect
  3. checkrange 524:-1 calc *0x413 & 0xffff || map --int15nolow=1 && pause Warnning: less memory
  4. if exist ()/boot/grub/init.flp command ()/boot/grub/init.flp
  5. if not exist ()/boot/grub/menu.flp call :errclpB
  6. :errclpB
  7. find --set-root /boot/grub/init.flp && configfile ()/boot/grub/init.flp init ! goto :errclpA
  8. :errclpA
  9. find --set-root /SXHPE.ISO || find --set-root /boot/SXHPE.ISO || goto :errclp2
  10. echo Loading SXHPE.ISO...
  11. map /SXHPE.ISO (0xB5) || map /boot/SXHPE.ISO (0xB5) || map --mem /boot/SXHPE.ISO (0xB5) || map --mem /SXHPE.ISO (0xB5)
  12. map --hook
  13. write 0x60003 1
  14. chainloader (0xB5)/grldr
  15. root (0xB5)
  16. boot
  17. :errclp2
  18. echo Menu file not found!
  19. pause
  20. commandline
复制代码
init.flp:
  1. !BAT
  2. terminal console
  3. echo  
  4. debug off
  5. checkrange 20120201:-1 read 0x8278 || pause Err.Version!!! && reboot
  6. checkrange 1 read 0x60000 && goto :showmenu ! write 0x60000 1
  7. set menuflpe=
  8. call Fn.0 0 0x8217 | set /u menuflpe=
  9. checkrange 0x21 read 0x8280 && if not "%menuflpe:~-4%"==".flp" pxe detect NotExist
  10. checkrange 524:-1 calc *0x413 & 0xffff || map --int15nolow=1 && pause Warnning: less memory
  11. write 0x60001 0
  12. ::PXE
  13. write 0x60002 0
  14. ::不加速
  15. write 0x60003 0
  16. ::整体ISO标志
  17. write 0x60005 0
  18. ::加速器已运行过标志
  19. write 0x60004 0
  20. ::debug状态标志
  21. write 0x60006 0
  22. ::图形模式标志
  23. debug 1
  24. checkrange 0x21 read 0x8280 && call :pxe
  25. set rootdev=%@root%
  26. root %rootdev%
  27. set PEISO=/SXHPE.ISO
  28. goto :menu
  29. :ztiso
  30. echo Loading SXHPE.ISO......
  31. if "#%1"=="#memmap" map --mem /SXHPE.ISO (0xB5) && map --hook && chainloader (0xB5)/grldr && root (0xB5) && write 0x60003 1 && boot
  32. map /SXHPE.ISO (0xB5) || map /boot/SXHPE.ISO (0xB5) || map --mem /boot/SXHPE.ISO
  33. map --hook
  34. chainloader (0xB5) && write 0x60003 1 && boot
  35. chainloader (0xB5)/grldr && write 0x60003 1 && boot
  36. :pxe
  37. if #%1=#qx pxe detect
  38. if /i "%menuflpe%"=="grldr" pxe detect
  39. if /i not "%menuflpe:~-4%"==".flp" pxe detect NotExist
  40. if /i "%menuflpe:~-4%"==".flp" pxe detect
  41. write 0x60001 1
  42. write 0x60002 1
  43. pxe
  44. :menu
  45. set krnl=
  46. if exist (bd)/MKRL/NVPEXP.LZMA rootnoverify (bd) && set krnl=(bd)/MKRL/NVPEXP.LZMA && goto :showmenu
  47. if exist (bd)/MKRL/NVPE2K3.LZMA rootnoverify (bd) && set krnl=(bd)/MKRL/NVPE2K3.LZMA && goto :showmenu
  48. if exist (bd)%PEISO% && rootnoverify (bd) && goto :ztiso
  49. if exist (bd)/boot/SXHPE.ISO set PEISO=/boot/SXHPE.ISO && rootnoverify (bd) && goto :ztiso
  50. ::有时候可能启动设备与当前根驱动器不一致,可能当前驱动器上存在这几个玩意,照上面三句执行
  51. if exist /MKRL/NVPEXP.LZMA set krnl=/MKRL/NVPEXP.LZMA && goto :showmenu
  52. if exist /MKRL/NVPE2K3.LZMA set krnl=/MKRL/NVPE2K3.LZMA && goto :showmenu
  53. if exist %PEISO% goto :ztiso
  54. if exist /boot/SXHPE.ISO set PEISO=/boot/SXHPE.ISO && goto :ztiso
  55. ::也许会有放到(hd0)/的情况,包括经过各种转换交换映射过来的情况 (这个不清楚什么时候遇到的)
  56. if exist (hd0)/MKRL/NVPEXP.LZMA rootnoverify (hd0) && set krnl=(hd0)/MKRL/NVPEXP.LZMA && goto :showmenu
  57. if exist (hd0)/MKRL/NVPE2K3.LZMA rootnoverify (hd0) && set krnl=(hd0)/MKRL/NVPE2K3.LZMA && goto :showmenu
  58. if exist (hd0)%PEISO% && rootnoverify (hd0) && goto :ztiso
  59. if exist (hd0)/boot/SXHPE.ISO set PEISO=(hd0)/boot/SXHPE.ISO && goto :ztiso
  60. ::上面三种情况都没有,全盘搜索
  61. find --set-root /MKRL/NVPEXP.LZMA && set krnl=/MKRL/NVPEXP.LZMA && goto :showmenu
  62. find --set-root /MKRL/NVPE2K3.LZMA && set krnl=/MKRL/NVPE2K3.LZMA && goto :showmenu
  63. find --set-root %PEISO% && goto :ztiso
  64. find --set-root /boot/SXHPE.ISO && set PEISO=/boot/SXHPE.ISO && goto :ztiso
  65. ::再不行去pd碰碰运气
  66. ::强行初始化PD
  67. call :pxe qx
  68. if exist (pd)/MKRL/NVPEXP.LZMA rootnoverify (pd) && set krnl=(pd)/MKRL/NVPEXP.LZMA && goto :showmenu
  69. if exist (pd)/MKRL/NVPE2K3.LZMA rootnoverify (pd) && set krnl=(pd)/MKRL/NVPE2K3.LZMA && goto :showmenu
  70. if exist (pd)%PEISO% rootnoverify (pd) && goto :ztiso
  71. if exist (pd)/boot/SXHPE.ISO set PEISO=(pd)/boot/SXHPE.ISO && goto :ztiso
  72. ::最后什么也没找着,报错退出
  73. pause You put the kernel deployed to where to go? && exit 1
  74. :showmenu
  75. set keyt=9999
  76. echo By:
  77. echo Esc to enter command line
  78. echo Space immediately load the root directory of the SXHPE.iso (built into the memory)
  79. pause --wait=3 Wait for you three seconds, the button: && set /A keyt=*0x4CB00
  80. if /i "#%keyt%"=="#9999" commandline
  81. if /i "%keyt%"=="0x20" call :ztiso memmap
  82. configfile /BOOT/GRUB/menu.flp
复制代码
此时工作一切正常。
而别的没有任何改动,就把init.flp的内容迁移到GRLDR里就出事了
会提示You put the kernel deployed to where to go?

结论:
call和goto内置到GRLDR里就无效
貌似是个BUG
请开发者解决!

[ 本帖最后由 2011czmxbb52 于 2012-5-16 17:40 编辑 ]
2#
发表于 2012-5-15 16:16:25 | 只看该作者
!BAT
这个标志是批处理,怎么能把它内置?批处理内置还没搞成过哦
回复

使用道具 举报

3#
 楼主| 发表于 2012-5-15 16:43:28 | 只看该作者
原帖由 527104427 于 2012-5-15 16:16 发表
!BAT
这个标志是批处理,怎么能把它内置?批处理内置还没搞成过哦

我搞过
看看我的PE的做法
搜索代码写成批,然后丢进GRLDR
回复

使用道具 举报

4#
发表于 2012-5-15 17:32:34 | 只看该作者
这个应该不成吧?里面会忽略call 和goto,从开头执行到结束,不管你前面goto到哪里,命令都会执行到goto下面一句去的
回复

使用道具 举报

5#
发表于 2012-5-15 17:35:05 | 只看该作者
做个简单的测试:

!BAT
echo 1 && goto :b
echo 2
pause
exit
:b
echo 3
pause
exit

把它分别内置和外置,试试看就知道了

[ 本帖最后由 527104427 于 2012-5-15 17:40 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2012-5-15 19:00:45 | 只看该作者
原帖由 527104427 于 2012-5-15 17:35 发表
做个简单的测试:

!BAT
echo 1 && goto :b
echo 2
pause
exit
:b
echo 3
pause
exit

把它分别内置和外置,试试看就知道了


的确表现怪怪的
有什么方法解决吗?

19-02-15.jpg (44.74 KB, 下载次数: 69)

内置GRLDR时的表现

内置GRLDR时的表现

19-02-29.jpg (89.71 KB, 下载次数: 66)

外置时的表现

外置时的表现
回复

使用道具 举报

7#
发表于 2012-5-15 19:02:32 | 只看该作者
原帖由 2011czmxbb52 于 2012-5-15 19:00 发表


的确表现怪怪的
有什么方法解决吗?

这个我弄不来,只能将批处理外置了
回复

使用道具 举报

8#
 楼主| 发表于 2012-5-15 19:04:26 | 只看该作者
原帖由 2011czmxbb52 于 2012-5-15 16:43 发表

我搞过
看看我的PE的做法
搜索代码写成批,然后丢进GRLDR

还有,这个代码自从我1.0.6版的时候就开始用了,至今没有一个人来报个这方面的问题。
再多加验证吧。希望能有个完满的结局。
Tips:再过个一年半载,如果没有人报告问题,就可以说这套内置于GRLDR的搜索代码是“铁打”的。
回复

使用道具 举报

9#
发表于 2012-5-15 19:08:25 | 只看该作者
原帖由 2011czmxbb52 于 2012-5-15 19:04 发表

还有,这个代码自从我1.0.6版的时候就开始用了,至今没有一个人来报个这方面的问题。
再多加验证吧。希望能有个完满的结局。
Tips:再过个一年半载,如果没有人报告问题,就可以说这套内置于GRLDR的搜索代码 ...

呵呵,楼主的PE在哪下载?
我下来研究研究哈
回复

使用道具 举报

10#
 楼主| 发表于 2012-5-15 19:08:49 | 只看该作者
原帖由 527104427 于 2012-5-15 19:02 发表
[quote]原帖由 2011czmxbb52 于 2012-5-15 19:00 发表


的确表现怪怪的
有什么方法解决吗?


这个我弄不来,只能将批处理外置了 [/quote]
看来将GRLDR和init.flp合并的梦想破灭。
希望有人来解决这个问题。
回复

使用道具 举报

11#
 楼主| 发表于 2012-5-15 19:09:23 | 只看该作者
原帖由 527104427 于 2012-5-15 19:08 发表

呵呵,楼主的PE在哪下载?
我下来研究研究哈

在我签名处的连接
回复

使用道具 举报

12#
发表于 2012-5-15 20:09:10 | 只看该作者
一切正常.............

只是楼主在想当然...

把BAT脚本放到MENU中执行是需要一些技巧的.我在最早版本的硬盘工具箱中有类拟的方案..

给你举个应用实例吧.懒得解释了.

!BAT
call Fn.15 "%0" 0x8217 || goto :batstart
debug off
default 0
timeout 0

title Run menu with bat script
call Fn.0 0 0x8217 | command
exit Nothing to do

:batstart
echo 1
echo 2
goto a
echo 3
:a
echo 4
pause
回复

使用道具 举报

13#
发表于 2012-5-15 20:46:20 | 只看该作者
事在人为。
敢想,敢干。
回复

使用道具 举报

14#
发表于 2012-5-15 21:31:46 | 只看该作者

也给个例子

!BAT
debug off
if not exist flag set flag=1 || set flag=
echo
if exist flag echo you are now in menu.
if exist flag (md)4+8 && reboot
:::::::::::::BATFILE:::::::::
if not exist flag echo you are now in batch.
set sum=0
set i=0
:loop
set /a i=%i%+1
set /a sum=%sum%+%i%
if not "%i%"=="100" goto :loop
echo 1+2+3+...+100=%sum%.
pause Game over.
回复

使用道具 举报

15#
发表于 2012-5-15 21:46:22 | 只看该作者

回复 #14 pseudo 的帖子

嗯嗯,一切皆有可能...
回复

使用道具 举报

16#
发表于 2012-5-15 22:00:23 | 只看该作者
简单解释下吧  要不估计还是有人不太明白

要注意的是grldr内置菜单是用configfle方式加载的  也就是加载菜单的方式  

而批处理是用command方式加载的  这样就导致了内置菜单不能直接作为脚本执行

c大和p大的方法说穿了都是执行内置菜单时再以脚本方式调用内置菜单执行  只不过判断方式不同而已

call Fn.0 0 0x8217  这个得到的是最后一次configfile的文件路径  也就是内置菜单

(md)4+8是内置菜单在内存中存放的地址
回复

使用道具 举报

17#
 楼主| 发表于 2012-5-16 07:41:21 | 只看该作者
好吧,还有:
将前面的init.flp和menu.flp合并,会有个奇怪的问题:执行到font时,就跳回到开头:
menu.flp

  1. debug 1
  2. terminal console
  3. map --mem ()/boot/grub/res.lzma (0x5)
  4. map --hook
  5. checkrange 1 read 0x60005 || command (0x5)/usb_acc.0pe && write 0x60004 1
  6. graphicsmode -1 100:1024 100:1024 24:32
  7. outline on
  8. color normal=0x0E highlight=0x0C helptext=0x0A heading=0x0C standard=0x0A border=0xE0
  9. splashimage (0x5)/background.bmp
  10. font (0x5)/unifont.hex
  11. #如果合并,在上面这句会跳到开头
  12. title ================================风铃PE V1.1.3 2012-4-24 By czmxbb52================================
  13. clear

  14. iftitle [if exist /MKRL/NVPEXP.LZMA] [1] 启动XPPE                     [1] Start XPPE
  15. terminal console
  16. debug 1
  17. root %@root%
  18. command (0x5)/F6IMG (0x5)/SRS
  19. command (0x5)/movehd
  20. echo Loading the file, please wait ... (may take a few minutes)
  21. map --mem ()/MKRL/NVPEXP.LZMA (hd0)
  22. map --mem ()/boot/TinyTools.LZMA (0xCE)
  23. map --hook
  24. map --unmap=0x5
  25. map --rehook
  26. echo Finished loading!
  27. chainloader (hd0,0)/ldrpe
  28. root (hd0,0)
  29. boot

  30. iftitle [if exist /MKRL/NVPEXP.LZMA] [2] 启动2K3PE                   [2] Start 2K3PE\n该版可能被裁掉了
  31. terminal console
  32. root %@root%
  33. command /boot/grub/F6IMG /boot/grub/SRS
  34. command (0x5)/movehd
  35. echo Loading the file, please wait ... (may take a few minutes)
  36. map --mem ()/MKRL/NVPE2K3.LZMA (hd0)
  37. map --mem ()/boot/TinyTools.LZMA (0xCE)
  38. map --hook
  39. map --unmap=0x5
  40. map --rehook
  41. echo Finished loading!
  42. chainloader (hd0,0)/ldrpe
  43. root (hd0,0)
  44. boot

  45. iftitle [if exist /MKRL/Win7PE.WIM] [3] 启动Win7PE(实用维护型)
  46. chainloader ()/boot/7peldr
  47. root ()
  48. boot

  49. iftitle [if exist /puppy/initrd.img] [4] 启动 Puppy Linux
  50. root (bd)
  51. kernel ()/puppy/vmlinuz pmedia=cd pfix=noram
  52. initrd ()/puppy/initrd.img
  53. checkrange 1 read 0x60001 && pxe unload


  54. title [5] 加载F6IMG后串接启动任意分区下的/PE.ISO\n[5] load F6IMG cascading start any partition /PE.ISO
  55. command (0x5)/F6IMG (0x5)/SRS
  56. debug 1
  57. find --set-root /PE.ISO
  58. map /PE.ISO (0xA8) || map --mem /PE.ISO (0xA8)
  59. if not exist (fd1)/TXTSETUP.OEM map --mem (0x5)/DiskImg/WVBlock.IMG (fd1)
  60. map --hook
  61. map --unmap=0x5
  62. map --rehook
  63. chainloader (0xA8)
  64. rootnoverify (0xA8)
  65. boot

  66. title [6] 交换(hd0)(hd1)             [6] swap (hd0) (hd1)
  67. map (hd0) (hd1)
  68. map (hd1) (hd0)
  69. map --rehook
  70. kernel || pause OK!

  71. iftitle [if exist /boot/IMGS/KONBOOT.GZ] [7] KonBoot免口令模块(请细看下面提示)\n[7] KonBoot password-free modules (which may need to swap the disk)\n传奇的绕过电脑启动密码的工具。可能需要交换磁盘, 然后工作完了会回到此菜单 。请选择从硬盘启动就OK!
  72. map --mem ()/boot/IMGS/KONBOOT.GZ (fd0)
  73. map --hook
  74. map --unmap=0x5
  75. map --rehook
  76. chainloader (fd0)+1
  77. rootnoverify (fd0)
  78. boot

  79. iftitle [if exist /boot/IMGS/maxdos.gz] [8] 启动MaxDOS工具箱          [8] Start MaxDOS Toolbox
  80. map --mem ()/boot/IMGS/maxdos.gz (fd0)
  81. map --hook
  82. map --unmap=0x5
  83. map --rehook
  84. chainloader (fd0)/io.sys
  85. rootnoverify (fd0)
  86. boot     

  87. title [9] 扫描/BOOT/IMGS目录下的镜像文件并列出\n[9] to start the RUN module and scanning /BOOT/IMGS directory, the image file and listed
  88. terminal console
  89. command RUN /BOOT/IMGS/

  90. iftitle [if exist /BOOT/IMGS/NTBOOT.iso] [10] 搜索并启动硬盘上的系统
  91. map --mem ()/BOOT/IMGS/NTBOOT.iso (0xCD)
  92. map --hook
  93. map --unmap=0x5
  94. map --rehook
  95. chainloader (0xCD)
  96. boot

  97. title [11] 启动第二硬盘(在U盘上是第一硬盘)上的Windows NT/2000/XP/2003\n[11] to start the second hard disk (U disk is the first hard disk) on Windows NT/2000/XP/2003\n简单,未考虑USB-ZIP的情况\nSimple, does not consider the case of the USB-ZIP               
  98. find --set-root --ignore-floppies --ignore-cd /ntldr
  99. map () (hd0)
  100. map (hd0) ()
  101. map --rehook
  102. find --set-root --ignore-floppies --ignore-cd /ntldr
  103. map --unmap=0x5
  104. map --rehook
  105. chainloader /ntldr

  106. title [12] 启动第二硬盘(在U盘上是第一硬盘)上的Windows Vista/7\n[12] to start the second hard disk (U disk is the first hard disk) on Windows Vista / Windows 7\n简单,未考虑USB-ZIP的情况\nSimple, does not consider the case of the USB-ZIP
  107. find --set-root --ignore-floppies --ignore-cd /bootmgr
  108. map () (hd0)
  109. map (hd0) ()
  110. map --rehook
  111. find --set-root --ignore-floppies --ignore-cd /bootmgr
  112. map --unmap=0x5
  113. map --rehook
  114. chainloader /bootmgr

  115. title [13] 高级功能菜单
  116. configfile /boot/grub/adv.flp

  117. title [14] 进入Grub控制台
  118. commandline

  119. title [15] 重新启动计算机
  120. reboot

  121. title [16] 关闭计算机
  122. halt || halt --no-acpi || halt --no-apm || halt --force-sci
复制代码

怎么回事?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 19:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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