goto
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行)
行用 :label 表示
举例
@echo off:startclsset /p numis=请输入数字1或2:if /i "%numis%"=="1" goto 1if /i "%numis%"=="2" (goto 2) else (echo 输入有误!&&pause>nul&&goto start):1echo 你输入的是1pause>nul&&goto start:2echo 你输入的是2pause>nul&&goto start
:eof 是批处理中唯一可以省去标签行的一种特定标签,表示整个代码的结尾处,因此当你把这句用在结尾处,当然和没用它是一样的,其它位置则显然作用就不一样。
可能大家在看教程或者代码时,总是难免会碰到 goto :eof 这样一句代码,大家都知道,goto 就是跳转到的意思,goto 后面跟着的是标签,也就是用 : 定义的标签,但,一般见到的 goto 后面的标签都是没有 : 这个的,怎么这里却使用了呢?
而找遍所有代码都没发现有 :eof 或者 eof 的踪影,怎么这里能正常使用而不出错呢?
其实,:eof 是内置标签,所以,我们就可以不用定义而去使用它了
那么它又有什么用呢?
据我所知,它有两个作用,在不同的位置,有不同的作用
1、在主程序中使用 goto :eof
主程序,就是指 批文件 的主要部分,(大家都知道,批文件有主程序和子程序之分)如果是在主程序的最后使用 goto :eof ,那它的作用就是 退出批处理并关闭cmd窗口,这个没什么难理解的,作用相当于 exit(也不一定要在主程序最后,在主程序的任何位置使用 goto :eof 都是结束批文件并关闭cmd窗口)
2、在子程序中使用 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 那里,不然,批处理会继续执行下去,也就达不到实际的效果了
注:如果子程序的下面没有代码了,那加不加都是一样的