在For循环中退出 - Windows命令处理器(CMD.EXE)

6 command-line for-loop cmd control-flow

如果发生任何错误,我试图找到从FOR循环中断/退出的方法.以下是批处理文件的内容.

@echo on

set myfile=D:\sample.txt

FOR /F "tokens=1,2 delims=," %%i in (%myfile%) do call :process "%%i"

:process
set recfile=%1%

echo %recfile%
echo "Step in Test1"
echo %errorlevel%
pause;

exit /B 0
If %errorlevel% NEQ 0 goto :fail1

:fail1
echo "Step in fail1"
pause;
exit /B 9993

:EOF
Run Code Online (Sandbox Code Playgroud)

Sample.txt有多条记录.如果发生任何错误,那么我希望退出批处理文件,而不是检查完整的sample.txt文件.例如,在语句echo%recfile%,如果我放置一些错误的命令ech%recfile%这是不正确的命令,那么我期望它应该进入fail1级别并退出.它成功地捕获了错误代码并进入fail1级别,但是在此声明之后,它再次检查sample.txt文件(下一条记录).有什么办法,如果我可以打破/退出FOR循环.

请指教.

谢谢,

小智 6

乔伊的回答很棒.我成功地使用了它.我发现你不必退出脚本.你可以使用goto :SomeLabel,:SomeLabel循环外的标签在哪里.

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
...


Joe*_*oey 5

您可以设置一个变量,这意味着应该中止完整的循环并像这样使用它:

:fail1
echo "Step in fail1"
pause
set exit=1
Run Code Online (Sandbox Code Playgroud)

你会像这样改变循环:

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

(为便于阅读,分为多行).

由于您只是从for循环中调用子例程,因此该子例程无法直接退出循环.因此,变量的变通方法.