批处理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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程之美-2.14-求数组的子数组之和的
- 下一篇: 跟着Artech学习WCF扩展(2) 自