如何在批处理文件中使用goto函数?

3
我正在编写一个批处理文件,其中包含if语句和goto命令,在第一条语句中无法正常工作。
:purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):

:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
:end

:ABC
echo purge ABC data !

:DEF
echo purge DEF data !

pause >nul

输出结果:------------

实际结果---------

Are you sure you want to Purge DATA ? (Y/N):Y
Are you want to Purge ABC or DEF Data ? (ABC/DEF):ABC
purge ABC data !
purge DEF data !

预期结果----

Are you sure you want to Purge DATA ? (Y/N):Y
Are you want to Purge ABC or DEF Data ? (ABC/DEF):ABC
purge ABC data !

1
标签仅是可以跳转的标记,并不妨碍程序执行流程。因此,请调整您的期望,或在需要表示文件结尾的位置插入额外的 goto :eof - user6811411
我如何在语句中使用goto :eof? - undefined
2个回答

7

Goto语句可以将执行点转移到标签位置。单独的标签并不会改变执行行为。换句话说,在批处理文件中的每个逻辑单元之后,您需要更改控制流程,否则它将继续执行下一条语句。

例如,您可以修改示例批处理文件以仅执行选定的一种结果,如下所示:

:purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):

:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
echo Unknown entry
goto :EOF

:ABC
echo purge ABC data !
goto :done

:DEF
echo purge DEF data !
goto :done

:done
pause >nul

第二个 goto :done 是非必要的,但养成这种习惯很好,以防将来添加更多分支可能性。

如何在批处理文件的if条件中打印未知输入的消息?你能帮忙吗?还有,在未知输入消息后,给予重新输入的机会。@Anon Coward - undefined

1

请查看我的答案 如何在 Windows 命令解释器输入不正确的用户输入时停止批处理文件执行?,在了解了使用 set /P 提示用户时遇到的常见问题以及需要做出多少努力才能使其故障安全之后,阅读一下使用专为此类任务设计的命令 choice 进行定义选项之间的选择可以有多么容易。

@echo off
echo Select the data to purge:
echo/
echo   1 ... ABC
echo   2 ... DEF
echo/
%SystemRoot%\System32\choice.exe /C 1ABC2DEF /N /M "Do you want to purge ABC or DEF data?"
echo/
if errorlevel 4 goto DEF

echo Purge ABC data!
goto Done

:DEF
echo Purge DEF data!

:Done
echo/
pause >nul

批处理文件用户可以按

  • 1, A, B, C, a, b, c 选择数据ABC或者
  • 2, D, E, F, d, e, f 选择数据DEF或者
  • Ctrl+C在用户进行额外确认后退出批处理文件处理。

如果音频输出未静音,每次按键都会产生短暂的错误声音,而choice则会等待在选项/C之后定义的键中不区分大小写。

为了理解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读显示的每个命令的所有帮助页面。

  • choice /?
  • echo /?
  • goto /?
  • if /?
  • pause /?

还请参考DosTips论坛主题:ECHO. 失败无法提供文本或空行-请改用ECHO/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接