【批处理】goto 用法举例

gotoshell

  指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。spa

  语法:goto label (label是参数,指定所要转向的批处理程序中的行)code

  行用 :label 表示教程

  举例cmd

@echo off
:start
cls
set /p numis=请输入数字1或2:
if /i "%numis%"=="1" goto 1
if /i "%numis%"=="2" (goto 2) else (echo 输入有误!&&pause>nul&&goto start)
:1
echo 你输入的是1
pause>nul&&goto start
:2
echo 你输入的是2
pause>nul&&goto start


:eof 是批处理中惟一能够省去标签行的一种特定标签,表示整个代码的结尾处,所以当你把这句用在结尾处,固然和没用它是同样的,其它位置则显然做用就不同。it


可能你们在看教程或者代码时,老是不免会碰到 goto :eof 这样一句代码,你们都知道,goto 就是跳转到的意思,goto 后面跟着的是标签,也就是用 : 定义的标签,但,通常见到的 goto 后面的标签都是没有 : 这个的,怎么这里却使用了呢?class

而找遍全部代码都没发现有 :eof 或者 eof 的踪迹,怎么这里能正常使用而不出错呢?软件


其实,:eof 是内置标签,因此,咱们就能够不用定义而去使用它了 语法

那么它又有什么用呢?程序


据我所知,它有两个做用,在不一样的位置,有不一样的做用


一、在主程序中使用 goto :eof


主程序,就是指 批文件 的主要部分,(你们都知道,批文件有主程序和子程序之分)若是是在主程序的最后使用 goto :eof ,那它的做用就是 退出批处理并关闭cmd窗口,这个没什么难理解的,做用至关于 exit(也不必定要在主程序最后,在主程序的任何位置使用 goto :eof 都是结束批文件并关闭cmd窗口)


二、在子程序中使用 goto :eof


上面说到了,批处理有主程序和子程序,子程序就是指,用 call 调用的部分,如



@echo off 

echo 欢迎来到 

call :deepin 

pause 

goto :eof 

:deepin 

echo 深度软件分坛批处理技术讨论区 

goto :eof


上面这个例子,主程序是指


@echo off 

echo 欢迎来到 

call :deepin 

pause 

goto :eof


最后使用了 goto :eof ,由于是在主程序的最后使用,因此,它的做用就是退出批处理并关闭cmd窗口


下面的


:deepin 

echo 深度软件分坛批处理技术讨论区 

goto :eof


就能够说是这个批文件的子程序了,由主程序中的 call 调用,最下面,也用到了 goto :eof ,那么它的做用又是什么,是否跟上面的同样呢?


确定不同啦,若是同样,还要说吗?呵呵……


它的做用就是:结束当前子程序并把控制权交还给调用它的主程序以便主程序继续执行下面的命令(我晕,这句乍就这么拗口)


啥意思呢?


看上面例子,结束子程序,就是结束 由 deepin 定义的子程序,如上面的 echo 深度软件分坛批处理技术讨论区 

把控制权交还给调用它的主程序,就是哪一个调用它就把它还给哪一个,好让它继续执行下面的代码


若是上面例子,就是返回到 call :deepin 这一句,而后继续执行下面的 pause以及接下来的代码


其实,说白了,就是执行完了这个子程序后就回到调用它的主程序而后继续执行它下面的代码


明白了没呢


主程序、子程序,都是相对而言的,没有一个明确的界定


如:


@echo off 

echo 欢迎来到 

call :deepin 

pause 

goto :eof 

:deepin 

echo 深度软件分坛 

call :bat 

goto :eof 

:bat 

echo 批处理技术讨论区 

goto :eof



:deepin 

echo 深度软件分坛 

call :bat 

goto :eof


是 

@echo off 

echo 欢迎来到 

call :deepin 

pause 

goto :eof


的子程序,而


:bat 

echo 批处理技术讨论区 

goto :eof


又是


:deepin 

echo 深度软件分坛 

call :bat 

goto :eof


的子程序


因此说,主或子都是不必定的,主程序,同时也能够是其它主程序的子程序,而子程序又能够是其它子程序的主程序,因此,主程序跟子程序都是相对的概念,并无明确的界定标准


在用 call 调用子程序时,在子程序的最后必定要加上 goto :eof 让它返回到 call 那里,否则,批处理会继续执行下去,也就达不到实际的效果了


注:若是子程序的下面没有代码了,那加不加都是同样的

相关文章
相关标签/搜索