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

Command line 退出For循环-Windows命令处理器(CMD.EXE),command-line,for-loop,cmd,control-flow,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

如果发生任何错误,我正在试图找到中断/退出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
Sample.txt有多条记录。如果出现任何错误,我希望退出批处理文件,而不是检查完整的sample.txt文件。e、 g.关于声明 echo%recfile%,如果我放置了一些错误的命令ech%recfile%,这是错误的命令,那么我希望它应该转到fail1级别并退出。它成功地捕获了错误代码,并进入fail1级别,但是在此状态之后,它将再次检查sample.txt文件(下一条记录)。有没有办法,如果我可以中断/退出循环

请给我一些建议


谢谢,

您可以设置一个变量,这意味着应该中止整个循环,并按如下方式使用它:

:fail1
echo "Step in fail1"
pause
set exit=1
FOR /F "tokens=1,2 delims=," %%i in (%myfile%) do (
  if defined exit (
    exit /b 9993
  ) else (
    call :process "%%i"
  )
)
你可以这样改变循环:

:fail1
echo "Step in fail1"
pause
set exit=1
FOR /F "tokens=1,2 delims=," %%i in (%myfile%) do (
  if defined exit (
    exit /b 9993
  ) else (
    call :process "%%i"
  )
)
(为了便于阅读,分成多行)


由于您只是从
for
循环调用一个子例程,因此该子例程无法直接退出循环。因此,使用变量解决问题。

乔伊的答案很好。我成功地使用了它。我发现你不必退出脚本。您可以使用
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 ... 对于/F“tokens=1,2 delims=,”%%i in(%myfile%)do( 如果定义了退出转到:ParseError 调用:进程“%%i” ) @回显成功:%myfile% goto:RestOfScript :解析错误 @回显失败:无法分析%myfile% @使用默认值回显。。。 :RestOfScript ...
你不需要给标签打电话

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

ENABLEDELAYEDEXPANSION
在这里做什么?!