批處理for中如何實(shí)現(xiàn)break 收藏
2008年10月30日 星期四 10時(shí)08分
當(dāng)然批處理程序中沒有break關(guān)鍵字,那又如何實(shí)現(xiàn)呢?先看看例子:
@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%
)
)
實(shí)現(xiàn)的功能是,根據(jù)AnchorOnLandPortFile修正AreaPortFile的內(nèi)容(需要修正的行末尾是"?"),輸出到MergeOnLandPortFile。
方案一、在for外層放置一個(gè)標(biāo)簽:_break,然后在for里面goto _break,實(shí)現(xiàn)。但是不行,在for里面(不管哪層)一旦用goto就會(huì)結(jié)束循環(huán)。
方案二、采用一個(gè)變量標(biāo)識(shí),其實(shí)這種方法并沒有break,遍歷了所有,只是標(biāo)記一下是否找到。還是不行,為啥呢?這和之前發(fā)過的文章中提到過,在for中set一個(gè)變量,這個(gè)變量的值不會(huì)改變,一直是最后一個(gè)值,上面的find==1。
方案三、其實(shí)這個(gè)問題和當(dāng)想在for中set變量時(shí)的處理方法一致,就是用call調(diào)用另外的程序,如:
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傳參數(shù)時(shí)遇到一個(gè)問題,就是參數(shù)中含有特殊符號(hào):",",這個(gè)時(shí)候需要將參數(shù)用雙引號(hào)括起來,但是取參數(shù)時(shí)需要去掉雙引號(hào),我的處理方法是:
for %%z in (%3) do set c=%%~z
應(yīng)該還有其他方法吧???
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。