(1) 运行 GOTO :EOF 后, CMD 返回并将等待下一条命令.
(2) 运行 EXIT 后, CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
(3) 运行 EXIT /B 后, CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
附: 命令 EXIT 和 GOTO :EOF 的用法.
(1) 使用 GOTO :EOF
@REM TEST.bat
@REM ------------
@PAUSE
@GOTO :EOF
a) 双击运行 TEST.bat, 运行完成后 CMD 窗口关闭.
b) 在 CMD 窗口中运行 TEST.bat, 运行完后 CMD 返回并等待下一条命令.
(2) 使用 EXIT
@REM TEST2.bat
@REM ------------
@PAUSE
@EXIT
a) 双击运行 TEST2.bat, 运行完成后 CMD 窗口关闭.
b) 在 CMD 窗口中运行 TEST2.bat, 运行完后 CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
(3) 使用 EXIT /B
@REM TEST3.bat
@REM ------------
@PAUSE
@EXIT /B
a) 双击运行 TEST3.bat, 运行完成后 CMD 窗口关闭.
b) 在 CMD 窗口中运行 TEST3.bat, 运行完后 CMD 返回并等待下一条命令.
(1) 使用 GOTO :EOF, 将返回到 CALL 命令, FOR 循环也将继续迭代.
@REM TEST4.bat
@REM ------------
@ECHO OFF
FOR /L %%i IN (1,1,3) DO CALL :FUNC%%i
PAUSE
@ECHO ON
@GOTO :EOF
:FUNC1
ECHO CALL :FUNC1
GOTO :EOF
:FUNC2
ECHO CALL :FUNC2
GOTO :EOF
:FUNC3
ECHO CALL :FUNC3
GOTO :EOF
(2) 使用 EXIT, 将直接从批处理文件(TEST5.bat)退出, 不能返回到 CALL 命令, FOR 循环迭代被终止.
@REM TEST5.bat
@REM ------------
@ECHO OFF
FOR /L %%i IN (1,1,3) DO CALL :FUNC%%i
PAUSE
@ECHO ON
@EXIT
:FUNC1
ECHO CALL :FUNC1
EXIT
:FUNC2
ECHO CALL :FUNC2
EXIT
:FUNC3
ECHO CALL :FUNC3
EXIT
(3) 使用 EXIT /B, 将返回到 CALL 命令, FOR 循环也将继续迭代.
@REM TEST6.bat
@REM ------------
@ECHO OFF
FOR /L %%i IN (1,1,3) DO CALL :FUNC%%i
PAUSE
@ECHO ON
@EXIT /B
:FUNC1
ECHO CALL :FUNC1
EXIT /B
:FUNC2
ECHO CALL :FUNC2
EXIT /B
:FUNC3
ECHO CALL :FUNC3
EXIT /B
附: 命令CALL :label 的用法.
一些情况下, 在 CMD 窗口中运行 EXIT 并不是退出 CMD.
(1) 在 FTP 子系统中, 运行 ! 从 FTP 子系统临时退出到命令提示符下, 这是运行 EXIT, 将返回到 FTP 子系统.
(2) 在命令提示符下嵌套新实例 cmd.exe 时, 运行 EXIT 将关闭嵌套的命令解释器, 而不是父命令解释器.
功能: 可以在不定义标签的情况下将控制传送到当前批处理脚本文件的末端.
备注: 必须满足以下两个条件.
(1) 启用了命令扩展(即默认状态);
(2) 使用 GOTO 和 :EOF 标签时, 必须在标签前插入(英文状态)冒号.
功能: cmd.exe 将 ERRORLEVEL 设置为指定的 exitCode. 如果退出 cmd.exe, cmd.exe 则使用指定的 exitCode 设置进程退出代码.
@REM TEST7.bat
@REM ------------
@ECHO TEST7.bat
@EXIT /B 30194447
在 CMD 命令提示符下执行:
该博客的 Word 格式文档 http://download.csdn.net/source/2730258