Exit in For loop - Windows Command Processor (CMD.EXE)

后端 未结 3 1498
半阙折子戏
半阙折子戏 2020-12-19 09:50

I am trying to find way to break / exit from FOR loop, if there are any error occured. Below is content of batch file.

@echo on

set myfile=D:\\sample.txt

F         


        
相关标签:
3条回答
  • 2020-12-19 10:00

    Joey's answer is great. I have used it with success. I discovered that you don't have to exit the script though. You can use goto :SomeLabel, where :SomeLabel is a label outside of the loop.

    FOR /F "tokens=1,2 delims=," %%i in (%myfile%) do (
      if defined exit goto :ParseError
      call :process "%%i"
    )
    
    @echo SUCCESS: %myfile%
    goto :RestOfScript
    
    :ParseError
    @echo FAILURE: cannot parse %myfile%
    @echo Using defaults...
    
    :RestOfScript
    ...
    
    
    0 讨论(0)
  • 2020-12-19 10:19

    You don't need to call a label

    set USBDRIVE=SETLOCAL 
    set exit=ENABLEDELAYEDEXPANSION
    
    FOR %%D IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
      DIR %%D:\SOURCES\INSTALL.WIM > nul 2>&1 && call set USBDRIVE=%%D: && call set exit=1
      if defined exit goto :dd3
    )
    :dd3
    
    0 讨论(0)
  • 2020-12-19 10:26

    You can set a variable, meaning that the complete loop should be aborted and use it like this:

    :fail1
    echo "Step in fail1"
    pause
    set exit=1
    

    And you'd change the loop like this:

    FOR /F "tokens=1,2 delims=," %%i in (%myfile%) do (
      if defined exit (
        exit /b 9993
      ) else (
        call :process "%%i"
      )
    )
    

    (broken into multiple lines for readability).

    Since you are just calling a subroutine from the for loop there is no way for this subroutine to exit the loop directly. Hence the workaround with a variable.

    0 讨论(0)
提交回复
热议问题