无忧启动论坛
标题:
用G4D脚本模拟循环结构
[打印本页]
作者:
星语
时间:
2014-3-15 20:10
标题:
用G4D脚本模拟循环结构
本帖最后由 星语 于 2014-3-15 20:14 编辑
因为G4D脚本(BAT)没有可用的循环结构(就是for、while)命令
所以我就做了一个通用的。
啥也不说了,上代码(有说明)
将这段代码直接放到你的BAT文件的最后即可使用
注意:这段脚本不会检查参数是否合法,请确保变量不会为文本再在参数中使用变量
::--------------------------------------------------------------------------
::--------------------------------------------------------------------------
::循环代码区
::参数说明:
:: while int start end step docmd
:: int变量名【此变量需自行清除】,start开始值,end结束值,step步值
:: docmd执行的命令行(要求为一个子程序的名称(带冒号!),子程序结束需要在最后加一行代码:exit)
:while
set blname=%1 > nul
set start=%2 > nul
set end=%3 > nul
set step=%4 > nul
set ftn=%5 > nul
::initialize
set %blname%=%start% > nul
set dq=%start% > nul
:callfff_while
call %ftn%
if %dq%>=%end% && goto :exit_while
set /a dq=%dq%+%step% > nul
set %blname%=%dq% > nul
goto :callfff_while
:exit_while
set blname=
set start=
set end=
set step=
set ftn=
set dq=
exit
复制代码
还有一个例子:
显示所有的硬盘分区信息
:start
call :while i 1 %hdnum% 1 :xunhuan
echo
goto :eof
:xunhuan
set /a l=%i%-1 > nul
echo -e 第%i%个硬盘(hd%l%)的信息:
geometry (hd%l%) || echo No hd%l%
exit
::--------------------------------------------------------------------------
::--------------------------------------------------------------------------
::循环代码区
::参数说明:
:: while int start end step docmd
:: int变量名【此变量需自行清除】,start开始值,end结束值,step步值
:: docmd执行的命令行(要求为一个子程序的名称,子程序结束需要有一行代码:exit)
:: while已经可以正常使用了
:while
set blname=%1 > nul
set start=%2 > nul
set end=%3 > nul
set step=%4 > nul
set ftn=%5 > nul
::initialize
set %blname%=%start% > nul
set dq=%start% > nul
:callfff_while
call %ftn%
if %dq%>=%end% && goto :exit_while
set /a dq=%dq%+%step% > nul
set %blname%=%dq% > nul
goto :callfff_while
:exit_while
set blname=
set start=
set end=
set step=
set ftn=
set dq=
exit
复制代码
如果这段代码有什么bug,请发上来,让大家一起来解决
作者:
2010lizhilong
时间:
2014-3-16 09:39
学习一下,给你顶起来
作者:
2011895866818
时间:
2014-4-5 00:51
支持一下
作者:
天使的魔翼
时间:
2014-4-8 16:11
正需要这样的批处理,在实际使用过程发现一个问题,如果根目录和BOOT、GRUB目录同时存在MEUN.LST、GLRDR文件时,实际指向这两个文件时会出错,建议增加处理出错后跳转。
例如MENU菜单如下时出错:
title 01. 启动本机 Windows 操作系统
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr || configfile (bd)/BOOT/GRUB/MENU.LST
map (hd0) ()
map () (hd0)
map --rehook
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
chainloader /ntldr || chainloader /bootmgr
title 02. 启动Windows_2003PE(Native极速,智能外置SRS,支持网络)
calc *0x8280 || set mem=yes
calc *0x82b8 && calc *0x82b9&0xff || set mem=yes
root (bd)
/BOOT/GRUB/SRSF6
if NOT "%@root%"=="(cd)" && map /BOOT/TWOF.ISO (0xfa)
if %mem%==yes && map --mem /BOOT/NVBOOTF.ISO (0xff) ! map /BOOT/NVBOOTF.ISO (0xff)
map --e820cycles=3
map --rehook
chainloader (0xff) || chainloader (0xff)/BOOT/NVTUPLDR.BIN
复制代码
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/)
Powered by Discuz! X3.3