批处理for中如何实现break
当然批处理程序中没有break关键字,那又如何实现呢?先看看例子:
@echo off
set AreaPortFile=Ports_A
set AnchorOnLandPortFile=OL%AreaPortFile%_Anchor
set MergeOnLandPortFile=MG%AreaPortFile%
if exist %MergeOnLandPortFile% del %MergeOnLandPortFile%
rem set find=0  // 方案二
for /F "eol=; tokens=1,2,3,4 delims=|" %%a in (%AreaPortFile%) do (
  if "%%d"=="?" (
    rem set find = 0
    rem for /F "eol=; tokens=1,2 delims=|" %%i in (%AnchorOnLandPortFile%) do (
    rem   if "%%i"=="A%%a" (
    rem     echo %%a^|%%b^|%%j>>%MergeOnLandPortFile%
    rem     set find=1
    rem     
    rem     goto _break   // 方案一
    rem   )
    rem )
    rem if "%find%"=="0" echo %%a^|%%b^|%%c^|%%d>>%MergeOnLandPortFile%
    rem :_break
    rem
    rem 方案三
    call CorrectBy "%%a" "%%b" "%%c" %%d
  ) else (
    echo %%a^|%%b^|%%c>>%MergeOnLandPortFile%
  )
)

实现的功能是,根据AnchorOnLandPortFile修正AreaPortFile的内容(需要修正的行末尾是"?"),输出到MergeOnLandPortFile。
        方案一、在for外层放置一个标签:_break,然后在for里面goto _break,实现。但是不行,在for里面(不管哪层)一旦用goto就会结束循环。
        方案二、采用一个变量标识,其实这种方法并没有break,遍历了所有,只是标记一下是否找到。还是不行,为啥呢?这和之前发过的文章中提到过,在for中set一个变量,这个变量的值不会改变,一直是最后一个值,上面的find==1。
        方案三、其实这个问题和当想在for中set变量时的处理方法一致,就是用call调用另外的程序,如:
for %%z in (%1) do set a=%%~z
for %%z in (%2) do set b=%%~z
for %%z in (%3) do set c=%%~z
set d=%4
echo %a% %b% %c% %d%
    for /F "eol=; tokens=1,2 delims=|" %%i in (%AnchorOnLandPortFile%) do (
      if "%%i"=="A%%a" (
        echo %a%^|%b%^|%%j>>%MergeOnLandPortFile%
        goto _break
      )
    )
    echo %a%^|%b%^|%c%^|%d%>>%MergeOnLandPortFile%
:_break
        OK,方案三成功了。
        在CorrectBy传参数时遇到一个问题,就是参数中含有特殊符号:",",这个时候需要将参数用双引号括起来,但是取参数时需要去掉双引号,我的处理方法是:
for %%z in (%3) do set c=%%~z
        应该还有其他方法吧!?

转载于:https://blog.51cto.com/batcracker/678546

批处理for中如何实现break相关推荐

  1. IF执行批处理程序中的条件处理:

    IF执行批处理程序中的条件处理: IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST ...

  2. switch()语句中,default,break关键字作用,以及贯穿问题

    switch()语句中,default,break关键字作用,以及贯穿问题 1.default代表switch()中没有此类情况 2没有break,语句会一直穿到底部

  3. 循环体中continue、break语句的使用

    一.用法 1)break语句通常用在循环语句和开关语句中.当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句:如果没有break语句,则将成为一个死循环而无 ...

  4. 【批处理DOS-CMD命令-汇总和小结】-批处理命令中的参数%0、%1、%2、%[0-9]、%0-9和批处理命令参数位置切换命令shift,dos命令中操作符%用法

    一.执行CMD命令的3种方式 执行CMD命令的两种方式分别是手动创建一个Cmd窗口和执行bat批处理文件. 第一种,先手动创建一个cmd窗口,然后往里面输入cmd命令,最后回车执行. 第二种,先在一个 ...

  5. nginx rewrite中last和break的区别

    在实际配置中,有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的. #location / { #proxy_pass http:// ...

  6. 批处理bat中的脚本

    设置变量使用set var=value,注意赋值前后不能有空格,获取变量使用%var% setlocal设置临时环境变量,不会影响环境变量,必须与endlocal使用 %~dp0表示当前脚本对应的目录 ...

  7. android程序退出 语句,android开发中continue,break、return的区别与使用

    一.continue :作用是跳过循环本中剩余的语句而强行执行下一次循环(即:不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环).continue语句只用在for.wh ...

  8. delphi中exit,abort,break,continue,halt,runerro 的区别

    delphi中表示跳出的有break,continue, exit,abort, halt, runerror. 1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或re ...

  9. Nginx 中 last、break、permanent、redirect

    2019独角兽企业重金招聘Python工程师标准>>> 一.last 和 break 1. last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异 ...

最新文章

  1. Linux中error while loading shared libraries错误解决办法
  2. cuda 判断nan 处理办法
  3. php ob flush 不管用,php ob_flush 不能每隔一秒输出
  4. Python全栈之路系列----之-----内置函数和匿名函数lamdba
  5. VR创投寻鹰会,一场深圳VR行业人的大聚会
  6. 阿里巴巴的开源项目Druid(关于数据库连接)
  7. Button按钮多行显示的实现方法
  8. matlab.什么意思,MATLAB是什么意思? matlab是什么软件?
  9. 推进 DevSecOps 走向未来
  10. css3 HTML5 效果
  11. 使用iptables+脚本实现只允许中国IP访问服务器
  12. 图解机器学习算法(14) | PCA降维算法详解(机器学习通关指南·完结)
  13. 突破电信80端口封锁,用CDN架设公司服务器!
  14. k2450 linux 显卡驱动,Debian系统安装NVIDIA驱动支持双显卡切换
  15. Linux网络之DNS域名解析概述
  16. Shiro学习笔记_02:shiro的认证+shiro的授权
  17. 计算机如何回到桌面,电脑系统教程:win10怎么返回到桌面状态
  18. 让OpenAi给我写个JS的set对象的笔记和快速去重方法
  19. 阿里云域名申请注册与绑定
  20. 网络安全常用的工具有哪些(二)

热门文章

  1. Python Web 框架:Django MVC搭建
  2. windows通过putty连接虚拟机Fedora
  3. JAVA API-----String类和StringBuffer类
  4. CentOs6.5下安装vim7.4
  5. 我的个人小站,欢迎大家吐槽
  6. [Windows编程] 监视DLL装载/卸载
  7. XmlValidatingReader
  8. html5新增属性有哪些,HTML5 新增属性
  9. hibernate中List一对多映射关系详解
  10. HTML DOM 方法