标题: [文本处理] 批处理双层循环如何跳出内循环而不跳出外循环? [打印本页]
作者: chenbin200818 时间: 2011-3-13 16:42 标题: 批处理双层循环如何跳出内循环而不跳出外循环?
例
for 条件 do (
for 条件 do (
goto end
)
:end
)
类似此类问题 , 但是这样是走不通的
请问如何解决
作者: plp626 时间: 2011-3-13 16:58
大概理解你的意思,是不是这样:
set "tmp="
for 条件 do (
if not defined tmp (
for 条件 do (
做你要做的。。。
满足条件后。。。 set "tmp=1"
)
) else (
做你该做的 或者不做
)
)
作者: plp626 时间: 2011-3-13 17:04
在循环曾的最后一个语句处带标签可能会出错,你试着给:end后加上一个注释语句
for 条件 do (
for 条件 do (
goto end
)
:end
rem 。。。。
)
但是这并没有什么意义,因为当goto跳到那个标签处的时候已经和第一个for语句没有任何关系了,再也不循环了,
作者: chenbin200818 时间: 2011-3-13 17:11
那该怎么办呢
我想从 内循环 中退出到 外循环 中做其他事情 该怎么办呢
作者: CrLf 时间: 2011-3-13 17:18
我所知的最好办法就是条件判断,迭代是不可避免的,但是可以选择是否执行
作者: chenbin200818 时间: 2011-3-13 17:23
刚刚测试一下 发现一个可行的办法
for do (
call :a
)
a:
for do (
goto end
)
:end
将内循环放在call中执行 就ok了
作者: chenbin200818 时间: 2011-3-13 17:25
奶奶的 平时都是linux下工作 用bash或者其他的语言 window这还是第一次写bat脚本 忙的我燋头烂额
作者: CrLf 时间: 2011-3-13 17:31
条件判断一,判断执行:- @echo off
- for /l %%a in (1 1 100) do (
- for /l %%b in (%%a 2 100) do if %%a gtr 20 echo %%a
- )
- pause
复制代码
条件判断二,更换语句:- @echo off&setlocal enabledelayedexpansion 2>nul 3>nul
- for /l %%a in (1 1 10) do (
- if %%a leq 5 (set "echo=echo error") else set "echo=cd z:"
- for /l %%b in (%%a 2 10) do !echo!||echo bingo
- )
- pause
复制代码
[ 本帖最后由 zm900612 于 2011-3-13 17:33 编辑 ]
作者: CrLf 时间: 2011-3-13 17:32
用goto虽然也是办法,但是效率太低了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |