Board logo

标题: [文本处理] 批处理双层循环如何跳出内循环而不跳出外循环? [打印本页]

作者: 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

条件判断一,判断执行:
  1. @echo off
  2. for /l %%a in (1 1 100) do (
  3.     for /l %%b in (%%a 2 100) do if %%a gtr 20 echo %%a
  4. )
  5. pause
复制代码
条件判断二,更换语句:
  1. @echo off&setlocal enabledelayedexpansion 2>nul 3>nul
  2. for /l %%a in (1 1 10) do (
  3.     if %%a leq 5 (set "echo=echo error") else set "echo=cd z:"
  4.     for /l %%b in (%%a 2 10) do !echo!||echo bingo
  5. )
  6. pause
复制代码

[ 本帖最后由 zm900612 于 2011-3-13 17:33 编辑 ]
作者: CrLf    时间: 2011-3-13 17:32

用goto虽然也是办法,但是效率太低了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2