无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2472|回复: 4
打印 上一主题 下一主题

[原创] 用G4D脚本模拟循环结构

[复制链接]
跳转到指定楼层
1#
发表于 2014-3-15 20:10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 星语 于 2014-3-15 20:14 编辑

因为G4D脚本(BAT)没有可用的循环结构(就是for、while)命令
所以我就做了一个通用的。
啥也不说了,上代码(有说明)
将这段代码直接放到你的BAT文件的最后即可使用

注意:这段脚本不会检查参数是否合法,请确保变量不会为文本再在参数中使用变量



  1. ::--------------------------------------------------------------------------
  2. ::--------------------------------------------------------------------------
  3. ::循环代码区
  4. ::参数说明:
  5. :: while int start end step docmd
  6. :: int变量名【此变量需自行清除】,start开始值,end结束值,step步值
  7. :: docmd执行的命令行(要求为一个子程序的名称(带冒号!),子程序结束需要在最后加一行代码:exit)
  8. :while
  9. set blname=%1 > nul
  10. set start=%2 > nul
  11. set end=%3 > nul
  12. set step=%4 > nul
  13. set ftn=%5 > nul
  14. ::initialize
  15. set %blname%=%start% > nul
  16. set dq=%start% > nul

  17. :callfff_while
  18. call %ftn%
  19. if %dq%>=%end% && goto :exit_while
  20. set /a dq=%dq%+%step% > nul
  21. set %blname%=%dq% > nul
  22. goto :callfff_while

  23. :exit_while
  24. set blname=
  25. set start=
  26. set end=
  27. set step=
  28. set ftn=
  29. set dq=
  30. exit
复制代码



还有一个例子:显示所有的硬盘分区信息

  1. :start
  2. call :while i 1 %hdnum% 1 :xunhuan
  3. echo
  4. goto :eof

  5. :xunhuan
  6. set /a l=%i%-1 > nul
  7. echo -e 第%i%个硬盘(hd%l%)的信息:
  8. geometry (hd%l%) || echo No hd%l%
  9. exit

  10. ::--------------------------------------------------------------------------
  11. ::--------------------------------------------------------------------------
  12. ::循环代码区
  13. ::参数说明:
  14. :: while int start end step docmd
  15. :: int变量名【此变量需自行清除】,start开始值,end结束值,step步值
  16. :: docmd执行的命令行(要求为一个子程序的名称,子程序结束需要有一行代码:exit)
  17. :: while已经可以正常使用了
  18. :while
  19. set blname=%1 > nul
  20. set start=%2 > nul
  21. set end=%3 > nul
  22. set step=%4 > nul
  23. set ftn=%5 > nul
  24. ::initialize
  25. set %blname%=%start% > nul
  26. set dq=%start% > nul

  27. :callfff_while
  28. call %ftn%
  29. if %dq%>=%end% && goto :exit_while
  30. set /a dq=%dq%+%step% > nul
  31. set %blname%=%dq% > nul
  32. goto :callfff_while

  33. :exit_while
  34. set blname=
  35. set start=
  36. set end=
  37. set step=
  38. set ftn=
  39. set dq=
  40. exit
复制代码


如果这段代码有什么bug,请发上来,让大家一起来解决
2#
发表于 2014-3-16 09:39:27 | 只看该作者
学习一下,给你顶起来
回复

使用道具 举报

3#
发表于 2014-4-5 00:51:54 | 只看该作者
支持一下
回复

使用道具 举报

4#
发表于 2014-4-8 16:11:57 | 只看该作者
正需要这样的批处理,在实际使用过程发现一个问题,如果根目录和BOOT、GRUB目录同时存在MEUN.LST、GLRDR文件时,实际指向这两个文件时会出错,建议增加处理出错后跳转。
例如MENU菜单如下时出错:
  1. title  01. 启动本机 Windows 操作系统
  2. find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr || configfile (bd)/BOOT/GRUB/MENU.LST
  3. map (hd0) ()
  4. map () (hd0)
  5. map --rehook
  6. find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
  7. chainloader /ntldr || chainloader /bootmgr

  8. title  02. 启动Windows_2003PE(Native极速,智能外置SRS,支持网络)
  9. calc *0x8280 || set mem=yes
  10. calc *0x82b8 && calc *0x82b9&0xff || set mem=yes
  11. root (bd)
  12. /BOOT/GRUB/SRSF6
  13. if NOT "%@root%"=="(cd)" && map /BOOT/TWOF.ISO (0xfa)
  14. if %mem%==yes && map --mem /BOOT/NVBOOTF.ISO (0xff) ! map /BOOT/NVBOOTF.ISO (0xff)
  15. map --e820cycles=3
  16. map --rehook
  17. chainloader (0xff) || chainloader (0xff)/BOOT/NVTUPLDR.BIN
复制代码

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-22 09:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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