中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何中断当前FOR循环继续后面的循环
作者:
标题: [已解决]如何中断当前FOR循环继续后面的循环 上一主题 | 下一主题
JasonMing
初级用户





积分 116
发帖 42
注册 2007-7-29
状态 离线
『楼 主』:  [已解决]如何中断当前FOR循环继续后面的循环

我有一个二级菜单象这样:

  Quote:
A -- 文件
      1. 读文件系统      2. 写文件系统
B -- 互连网
      1. 服务端            2.客户端
C -- 多媒体
      1.相机                2.录音

现在我弄一个选择系统,开始时屏幕提示输入分类(ABC,可以连续选择多个),然后提示输入各个分类中的项目,然后输出到配置文件

现在代码中有点问题,如果输入的值不在ABC之内就会导致输出配置文件时中有错误的信息,我想在FOR循环中判断如果输入的值不合法就中断当前循环但是要继续下一循环,代码如下,蓝色字就是代表我不知道怎么做的地方~~~

set menua=文件
set menub=互连网
set menuc=多媒体
set /p class=请输入分类:
setlocal EnableDelayedExpansion
for /l %%i in (0,1,2) do (
    set cls=!class:~!%%i,1!
    for /f "delims=" %%j in ('echo menu!cls!') do set menu=!%%j!
    if !menu!.==. (这里需要终止当前循环,但是要继续进行下一个)
    set /p itm=请输入“!menu!”中的项:
    for /l %%k in (0,1,1) do (
        set output=!itm:~%%k,1!
        echo !cls!!output!>>config.ini
    )
)

蓝色字的地方我试过用BREAK命令,不过好象无效,请高手们回答一下,如何做到这一点,还有我代码里面有什么错误请帮忙改正,谢谢各位~~~

[ Last edited by JasonMing on 2007-10-14 at 11:33 AM ]

2007-10-13 20:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  



  Quote:
    if not !menu!.==. (
    set /p itm=请输入“!menu!”中的项:
    for /l %%k in (0,1,1) do (
        set output=!itm:~%%k,1!
        echo !cls!!output!>>config.ini
    )
    )

这样试试呢?

2007-10-13 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  



  Quote:
蓝色字的地方我试过用BREAK命令,不过好象无效

break /? 命令帮助中有这样的说明:

  Quote:
这个命令是为了与 DOS 系统的兼容而保留的,在 Windows XP
里不起作用。

[ Last edited by lxmxn on 2007-10-13 at 09:08 PM ]

2007-10-13 21:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JasonMing
初级用户





积分 116
发帖 42
注册 2007-7-29
状态 离线
『第 4 楼』:  

其实我整段代码不止这么短,这里只是一个精简例子,如果用if括起来会很麻烦的···

能不能用goto :eof去终止当前的循环而不影响下面的循环???

2007-10-13 21:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

在推荐在for命令内部使用标签goto,我没有用过。

可以做一个在for命令外面的标签,然后call调用,如果条件不成立就goto :EOF。

2007-10-13 23:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JasonMing
初级用户





积分 116
发帖 42
注册 2007-7-29
状态 离线
『第 6 楼』:  

谢谢版主的回答···
我就是怕转跳到内部标签不会继续当前这一循环而一直往下执行,不过最后还是用了if去判断了,其他的我试试看看行不行,现在这里是弄好的代码的一部分~~~
:ADVSet
REM *********************** 环境定义开始 ******************************
if not defined baseset (
    set menuA=用户数据
    set menuB=互联网功能
    set menuC=信息功能
    set menuD=本地连接
    set menuE=多媒体录制
    set menuF=自动启动
)
set itmnumA=8
set itmnumB=7
set itmnumC=5
set itmnumD=4
set itmnumE=2
set itmnumF=1
REM *********************** 环境定义结束 ******************************
if defined baseset goto MainSet
    set /p advclass0=请输入分类:
    if not defined advclass0 goto QUIT
    if %advclass0%.==0. (set ADV=&&goto setpms)
    setlocal EnableDelayedExpansion
:MainSet
REM 设定所有变量为0
for %%i in (A B C D E F) do for /l %%I in (1,1,!itmnum%%i!) do set x%%i%%I=0
::主体判断
for /l %%i in (0,1,5) do (
    set advclass=!advclass0:~%%i,1!
    if defined advclass (
        if not defined baseset (
            for /f "delims=" %%a in ('echo menu!advclass!') do set menu=!%%a!
            set /p advitm!advclass!=请输入“!menu!”中的项:
        )
        for /f "delims=" %%a in ('echo advitm!advclass!') do set advitm0=!%%a!
        for /f "delims=" %%a in ('echo itmnum!advclass!') do set itmnum=!%%a!
        if not defined advitm0 set advitm0=0
        if /i !advitm0!==a set advitm0=12345678
        set /a itmnum0=!itmnum!-1
REM 设定赋值变量为1
        for /l %%I in (0,1,!itmnum0!) do (
            set advitm=!advitm0:~%%I,1!
            if defined advitm if !advitm! LEQ !itmnum! set x!advclass!!advitm!=1
        )
    )
)
::输出设置
echo ;权限设置>set.ini
for /f "delims=" %%i in ('set x') do (
    set advset0=%%i
    set advset=!advset0:~1,4!
echo !advset! >>set.ini
)
setlocal DisableDelayedExpansion
[ Last edited by JasonMing on 2007-10-14 at 10:57 AM ]

2007-10-14 10:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: