首页 > 批处理命令——goto 和 :

批处理命令——goto 和 :

  谈起goto,相信大家应该想到的是面向过程编程。其实,这就相当于当有人向你谈起class,意味着你就懂得面向对象编程。如果你不懂,那么你们的沟通将会很困难。不懂我说的啥意思吗?请参见曾经分享王路的一篇文章《永远不要对一个外行聊你的专业》

   一般常规的批处理命令,按照自上而下的顺序逐行执行,也就是说,只有第一行命令执行之后,才可能执行第二行,第二行执行之后,才可以执行到第三行.....如此依次执行。那么,如果对于不同的情况,需要执行不同的既定操作,常规的执行规则显然是无法完成任务的,这种应用场景下怎么办呢?我们就需要引入流程跳转的概念,即就是动用流程跳转语句goto了。流程跳转的含义:改变默认的执行顺序,强制跳转到指定的位置执行特定的程序块。

  为什么要把goto和冒号这两个命令联合起来介绍?因为它们是分不开的,无论少了哪个或多了哪个都会出错。goto是个跳转命令,紧跟其之后的是标签名;冒号是一个标签标志,紧跟其之后的是标签名,两者合称标签。当程序运行到goto时,将自动跳转到冒号定义的部分去执行(呵呵~试想一下,是不是分不开?)。goto语句与标签一一呼应,在实现流程跳转时相辅相成,缺一不可。

  使用goto语句注意事项:

  1. 一一对应。goto语句与标签要相互对应。不允许只有goto语句而没有相应的标签段,否则,程序将找不到相应的标签段而直接退出;只有标签段而没有goto语句是允许的,但不能实现流程跳转功能,从代码精简的角度来看,有标签段而没有goto语句,则此标签是多余的,大可精剪。

  2. 多个标签。若有多个标签段,则需要注意标签段之间是否需要添加恰当的退出语句来终止程序继续向下执行,这是很多新手很容易犯错的地方,需要谨慎。

  3. 标签名只可以使用常量,而不能使用变量;

  举例如下:新建一个文本文件,命名为goto,修改文件类型为bat,用Notepad++打开文件,编辑内容如下:

 1 @echo off
 2 set /p input=请输入字母A或B: 
 3 if "%input%"=="A" goto A
 4 if "%input%"=="B" goto B
 5 pause 
 6 exit 
 7 
 8 :A
 9 echo 您输入的字母是A
10 pause
11 exit 
12 
13 :B
14 echo 您输入的字母是B 
15 pause 
16 exit 

  执行结果如下:

  示例分析:

  如果去掉标签:A 和 :B之间的exit语句,那么,当输入字母A之后,结果将同时显示“您输入的字母是A”和“您输入的字母是B”这两行内容,而保留exit语句将只会在显示“您输入的字母是A”后,按任意键推出批处理程序。因为批处理是自上而下逐行执行的,即使用goto语句跳转之后,在新的位置上,这一执行规则仍然会保持,直至碰到另一个流程跳转语句,执行过程并不会在两个标签段之间自动终止。还不理解? 

  新建一个文本文件,命名为goto1,修改文件类型为bat,用Notepad++打开文件,编辑内容如下:

 1 @echo off
 2 set /p input=请输入字母A或B: 
 3 if "%input%"=="A" goto A
 4 if "%input%"=="B" goto B
 5 pause 
 6 exit 
 7 
 8 :A
 9 echo 您输入的字母是A
10 pause
11 
12 :B
13 echo 您输入的字母是B
14 pause
15 exit

  执行结果如下:

  

Good  Good  Study, Day  Day  Up.

顺序   选择  循环  总结

转载于:https://www.cnblogs.com/Braveliu/p/5077868.html

更多相关:

  • 在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死。在这时、我们可以通过Thread、Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死,但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的。那么我们又是否有一种比较通用的方法、来设...

  • 传参 如果程序执行的时候需要加入参数,如 ./sample aa bb 使用 gdb 的时候可以使用如下方式 gdb --args ./sample aa bb 执行 启动 gdb 之后,直接使用 r,就是 run 的意思,或者可以使用 b 加一个断点进行调试。处理信号 如果在使用的时候,遇到类似下面的报错 Threa...

  • 进程的图文形象表示 阮一峰–进程与线程的一个简单解释 多进程实质 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢? 答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务...

  • redis 事物: Redis 事物的实现: 首先 wath监控键值 myKey开启批量执行 multi,执行命令入列,执行 exec 。如果监控的键值mykey 没有被修改过,则exec 中批量执行的命令成功,否则执行失败。无论执行成功与否,都会执行取消wath的执行  Redis multi 批量执行,是先把批量中的命令放入队列...

  • 一、准备工作: 1.登录服务器,切换到root用户(su - root,然后输入密码,按enter),进入根目录:cd / 2.进入要安装jdk的目录,自己可以创建一个java目录,执行命令如下: cd /usr/local/ mkdir java 二、下载安装包 1.打开官网下载界面:https://www.oracle.com/...

  • 今天在代码中第一次使用lxml解析xml文件时出错了, XMLSyntaxError: Opening and ending tag mismatch: keyEffectiveDate line 21 and keyEffectiveData, line 21, column 80 截图如下 而我的xml文件是这样的...

  • EL语法:${ } EL取值来自于作用域对象 1.如何从指定作用域取值(默认从最小作用域取值)   pageScope、requestScope、sessionScope、applicationScope   ${pageScope.xxx }--- ${requestScope.xxx} --- ${sessionScope.xx...

  • 超文本标记语言 (Hyper Text Markup Language,HTML)不是一种编程语言,而是一种标记语言,用一套标记标签描述网页 HTML 标记标签又被称为 HTML 标签(HTML Tag),它是由尖括号包围的关键词,一般情况下成对出现,其中第一个标签是开始标签,第二个标签是结束标签 还需要清楚的一个概念是 HTML...

  • 参考:http://www.cnblogs.com/liwenzhou/p/7988087.html HTML介绍 Web服务本质  import socketsk = socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr...

  • thinkphp5内置标签 知道内置标签怎么用,查手册的时候好查 却功能的时候在里面找着来用 内置标签一览 1 内置标签 2 3 变量输出使用普通标签就足够了,但是要完成其他的控制、循环和判断功能,就需要借助模板引擎的标签库 4 功能了,系统内置标签库的所有标签无需引入标签库即可直接使用。 5 内置标签包括: 6 标...