如果发生任何错误,我正试图找到断开/退出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文件。例如声明 echo%recfile%,如果我放置了一些错误的命令ech%recfile%,这是不正确的命令,那么我期待它应该进入fail1级别并退出。它成功地捕获了错误代码并进入fail1级别,但是在此声明之后,它再次检查sample.txt文件(下一条记录)。有没有办法,如果我可以打破/退出FOR循环。
请建议。
谢谢,
答案 0 :(得分: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 ...
答案 1 :(得分:5)
您可以设置一个变量,这意味着应该中止完整循环并使用它:
: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
循环调用子例程,因此该子例程无法直接退出循环。因此,变量的解决方法。
答案 2 :(得分:2)
您无需拨打标签
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