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 ...
您可以设置一个变量,这意味着应该中止完整的循环并像这样使用它:
: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循环中调用子例程,因此该子例程无法直接退出循环.因此,变量的变通方法.