批处理for中如何实现break

2008年10月30日 星期四 10时08分

        当然批处理程序中没有break关键字,那又如何实现呢?先看看例子:

  1. @echo off
  2. set AreaPortFile=Ports_A
  3. set AnchorOnLandPortFile=OL%AreaPortFile%_Anchor
  4. set MergeOnLandPortFile=MG%AreaPortFile%
  5. if exist %MergeOnLandPortFile% del %MergeOnLandPortFile%
  6. rem set find=0  // 方案二
  7. for /F "eol=; tokens=1,2,3,4 delims=|" %%a in (%AreaPortFile%) do (
  8.   if "%%d"=="?" (
  9.     rem set find = 0
  10.     rem for /F "eol=; tokens=1,2 delims=|" %%i in (%AnchorOnLandPortFile%) do (
  11.     rem   if "%%i"=="A%%a" (
  12.     rem     echo %%a^|%%b^|%%j>>%MergeOnLandPortFile%
  13.     rem     set find=1
  14.     rem     
  15.     rem     goto _break   // 方案一
  16.     rem   )
  17.     rem )
  18.     rem if "%find%"=="0" echo %%a^|%%b^|%%c^|%%d>>%MergeOnLandPortFile%
  19.     rem :_break
  20.     rem
  21.     rem 方案三
  22.     call CorrectBy "%%a" "%%b" "%%c" %%d
  23.   ) else (
  24.     echo %%a^|%%b^|%%c>>%MergeOnLandPortFile%
  25.   )
  26. )

        实现的功能是,根据AnchorOnLandPortFile修正AreaPortFile的内容(需要修正的行末尾是"?"),输出到MergeOnLandPortFile。
        方案一、在for外层放置一个标签:_break,然后在for里面goto _break,实现。但是不行,在for里面(不管哪层)一旦用goto就会结束循环。
        方案二、采用一个变量标识,其实这种方法并没有break,遍历了所有,只是标记一下是否找到。还是不行,为啥呢?这和之前发过的文章中提到过,在for中set一个变量,这个变量的值不会改变,一直是最后一个值,上面的find==1。
        方案三、其实这个问题和当想在for中set变量时的处理方法一致,就是用call调用另外的程序,如:

  1. for %%z in (%1) do set a=%%~z
  2. for %%z in (%2) do set b=%%~z
  3. for %%z in (%3) do set c=%%~z
  4. set d=%4
  5. echo %a% %b% %c% %d%
  6.     for /F "eol=; tokens=1,2 delims=|" %%i in (%AnchorOnLandPortFile%) do (
  7.       if "%%i"=="A%%a" (
  8.         echo %a%^|%b%^|%%j>>%MergeOnLandPortFile%
  9.         goto _break
  10.       )
  11.     )
  12.     echo %a%^|%b%^|%c%^|%d%>>%MergeOnLandPortFile%
  13. :_break

        OK,方案三成功了。

        在CorrectBy传参数时遇到一个问题,就是参数中含有特殊符号:",",这个时候需要将参数用双引号括起来,但是取参数时需要去掉双引号,我的处理方法是:

  1. for %%z in (%3) do set c=%%~z

        应该还有其他方法吧!?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值