我有以下代码:
@echo off
set scriptTitle=Mode Changer
title %scriptTitle%
rem Take Details
set /p machine=Enter machine name:%=%
echo. %machine%
set /p rMSNewMode=Mode (t/l):%=%
echo. %rMSNewMode%
rem Perform Task
cls
rem Check machine existence
ping %machine% -n 1
if %errorLevel% == 1 call:error "The specified machine (%machine%) could not be located."
:error
color 4f
title ERROR: %scriptTitle%
cls
echo. The following error has occurred:
echo.
echo. %~1
echo.
pause
goto EOF
批处理文件完成后,我按预期“按任意键继续”。但是,它需要在批处理文件结束之前按两次“任意键”。如果我替换以下行,则会显示:
if %errorLevel% == 1 call:error "The specified machine (%machine%) could not be located."
与
if %errorLevel% == 1 goto error
我只收到一次提示。
问题是什么?
答案 0 :(得分:5)
与许多语言不同,批处理没有概念结束"程序" - 它只是逐行继续执行,直到它到达文件结尾。因此,在完成主线之后需要goto :eof
,否则将继续执行子程序代码。 :EOF
是CMD
理解为end of file
的预定义标签。冒号必需。
当call :label
批处理返回到call
后面的语句时(因为标签为call
ed),这是color 4f
在error
例行程序中。刚刚在返回之前执行了pause
,批量只是逐行收费,直到它再次遇到pause
- 因此有两个提示/响应周期。