batch: como sair de um ciclo sem um rótulo

1

está aqui um comando para sair de um FOR sem usar um "rótulo goto"?

for %%c in (list) do (
 [some code]
 for %%i in (1 1 100) do (
   [some code]
   if [a condition] exit-this-for
   [some code]
   )
rem go here when exit
 [some code]
 )

eu odeio os rótulos!

    
por CSG 12.12.2015 / 11:40

1 resposta

2

Mesmo que você odeie rótulos, recusar-se a usá-los limita suas opções aqui. Não consigo pensar em uma maneira fácil de fazer isso em um único arquivo. Se você não odeia a idéia de usar dois arquivos em lote, você pode fazer algo assim. A execução de a.cmd irá CALL b.cmd e realizará ERRORLEVEL check com base em qualquer EXIT /B em b.cmd .

a.cmd:

REM a.cmd  
@ECHO OFF
SET CHECKVAR=10

CALL b.cmd

IF ERRORLEVEL %CHECKVAR% (
    REM go here when exit from b.cmd met condition
    ECHO "B was %CHECKVAR%"
) ELSE (
    REM go here when exit from b.cmd did not meet condition
    ECHO "B was not %CHECKVAR%"
)

b.cmd

REM b.cmd
@ECHO OFF

FOR /L %%A IN (0,1,3) DO (
    ECHO "A: %%A"
    FOR /L %%B IN (0,1,100) DO (
        ECHO "B: %%B"
        REM Do what ever conditional check you like here.
        REM Just need to return some ERRORLEVEL to a.cmd.
        IF %%B==%CHECKVAR% (
            EXIT /B %CHECKVAR%
        )
    )
)
    
por 12.12.2015 / 12:33

Tags