批處理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%
  )
)ide

        實現的功能是,根據AnchorOnLandPortFile修正AreaPortFile的內容(須要修正的行末尾是"?"),輸出到MergeOnLandPortFile。
        方案1、在for外層放置一個標籤:_break,而後在for裏面goto _break,實現。可是不行,在for裏面(無論哪層)一旦用goto就會結束循環。
        方案2、採用一個變量標識,其實這種方法並無break,遍歷了全部,只是標記一下是否找到。仍是不行,爲啥呢?這和以前發過的文章中提到過,在for中set一個變量,這個變量的值不會改變,一直是最後一個值,上面的find==1。
        方案3、其實這個問題和當想在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
        應該還有其餘方法吧!?
 token

相關文章
相關標籤/搜索