批处理命令——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
执行结果如下: