【批處理】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 那裏,否則,批處理會繼續執行下去,也就達不到實際的效果了


注:若是子程序的下面沒有代碼了,那加不加都是同樣的

相關文章
相關標籤/搜索