批处理文件PAUSE需要两次按键才能解除

时间:2014-06-19 23:24:04

标签: windows batch-file scripting

我有以下代码:

@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

我只收到一次提示。

问题是什么?

1 个答案:

答案 0 :(得分:5)

与许多语言不同,批处理没有概念结束"程序" - 它只是逐行继续执行,直到它到达文件结尾。因此,在完成主线之后需要goto :eof,否则将继续执行子程序代码。 :EOFCMD理解为end of file的预定义标签。冒号必需

call :label批处理返回到call后面的语句时(因为标签为call ed),这是color 4ferror例行程序中。刚刚在返回之前执行了pause,批量只是逐行收费,直到它再次遇到pause - 因此有两个提示/响应周期。