批处理for中如何实现break
批处理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相关推荐
- IF执行批处理程序中的条件处理:
IF执行批处理程序中的条件处理: IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST ...
- switch()语句中,default,break关键字作用,以及贯穿问题
switch()语句中,default,break关键字作用,以及贯穿问题 1.default代表switch()中没有此类情况 2没有break,语句会一直穿到底部
- 循环体中continue、break语句的使用
一.用法 1)break语句通常用在循环语句和开关语句中.当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句:如果没有break语句,则将成为一个死循环而无 ...
- 【批处理DOS-CMD命令-汇总和小结】-批处理命令中的参数%0、%1、%2、%[0-9]、%0-9和批处理命令参数位置切换命令shift,dos命令中操作符%用法
一.执行CMD命令的3种方式 执行CMD命令的两种方式分别是手动创建一个Cmd窗口和执行bat批处理文件. 第一种,先手动创建一个cmd窗口,然后往里面输入cmd命令,最后回车执行. 第二种,先在一个 ...
- nginx rewrite中last和break的区别
在实际配置中,有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的. #location / { #proxy_pass http:// ...
- 批处理bat中的脚本
设置变量使用set var=value,注意赋值前后不能有空格,获取变量使用%var% setlocal设置临时环境变量,不会影响环境变量,必须与endlocal使用 %~dp0表示当前脚本对应的目录 ...
- android程序退出 语句,android开发中continue,break、return的区别与使用
一.continue :作用是跳过循环本中剩余的语句而强行执行下一次循环(即:不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环).continue语句只用在for.wh ...
- delphi中exit,abort,break,continue,halt,runerro 的区别
delphi中表示跳出的有break,continue, exit,abort, halt, runerror. 1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或re ...
- Nginx 中 last、break、permanent、redirect
2019独角兽企业重金招聘Python工程师标准>>> 一.last 和 break 1. last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异 ...
最新文章
- Linux中error while loading shared libraries错误解决办法
- cuda 判断nan 处理办法
- php ob flush 不管用,php ob_flush 不能每隔一秒输出
- Python全栈之路系列----之-----内置函数和匿名函数lamdba
- VR创投寻鹰会,一场深圳VR行业人的大聚会
- 阿里巴巴的开源项目Druid(关于数据库连接)
- Button按钮多行显示的实现方法
- matlab.什么意思,MATLAB是什么意思? matlab是什么软件?
- 推进 DevSecOps 走向未来
- css3 HTML5 效果
- 使用iptables+脚本实现只允许中国IP访问服务器
- 图解机器学习算法(14) | PCA降维算法详解(机器学习通关指南·完结)
- 突破电信80端口封锁,用CDN架设公司服务器!
- k2450 linux 显卡驱动,Debian系统安装NVIDIA驱动支持双显卡切换
- Linux网络之DNS域名解析概述
- Shiro学习笔记_02:shiro的认证+shiro的授权
- 计算机如何回到桌面,电脑系统教程:win10怎么返回到桌面状态
- 让OpenAi给我写个JS的set对象的笔记和快速去重方法
- 阿里云域名申请注册与绑定
- 网络安全常用的工具有哪些(二)