談起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.
順序 選擇 循環 總結