BAT腳本的一些技巧寫法

我以前一直以爲bat不能像Linux的shell一樣設置函數並且調用,事實上我發現這是可以的。不過由於批處理的特性是一行一行執行的,這種label的函數必須要寫在文本的最後。如果寫在了批處理命令的前面,bat會逐行運行裏面的命令的。寫在文檔的最後面,並且在“函數區域”前跳過這些代碼。

(順便吐槽一下,這種函數的寫法和linux的shell很不一樣,shell的function中的命令必須寫在命令的前面,讓shell逐行運行一次,才能在後面的命令中被人調用。)


函數的寫法:

::在這個例子中我試圖寫的一個函數起名爲testfunction,它的操作就是運行一個echo命令。

::使用call命令,並且在後面寫入函數名,函數名的前方寫一個:代表這是一個label。

call :testfunction



::這個goto命令讓批處理在運行的時候跳過所有函數的部分。

goto EOF


::從下面一行開始就是函數的部分,它們應該是bat腳本的最後部分,理論上不應該在下方再寫任何的命令了。首先如同goto的命令一樣,首先要先寫一個lable

:testfunction

echo Test function is running.

rem exit /b 會讓程序跳轉到調用函數的命令處,而不是直接退出程序。

exit /b


:EOF

::以上就是示例腳本的所有內容。


當然你可以不把函數內容寫在這個bat中,而是另外寫一個bat文件,然後call這個bat的絕對路徑,那也是可以的。爲了方便我就暫時稱呼我運行的腳本名字爲a.bat,而調用的腳本爲b.bat。

a.bat的內容是。

set a=aaa

call b.bat

echo %b%

pause

而b.bat的內容是

echo %a%

set b=bbb

在這兩個腳本中a腳本和b腳本各自定義了一個變量,而沒有定義另外一個腳本中定義的變量,但是echo的又互相是對方腳本中定義的變量。如果只有單獨的腳本,兩個腳本的echo命令是返回不了任何內容的。但是如果你運行了a腳本並且調用了b腳本,可以發現,call調用的腳本之間的變量是可以互通的。不過腳本之間的goto的label不能互通,即你不能在a腳本中goto到b的一個label中去。

而且不能不寫call命令,如果不寫而是直接寫b腳本的路徑,bat依舊可以運行,不過運行完b腳本之後,整個批處理就退出了。例如我們將a腳本中的call b.bat中的call去掉,那麼腳本只會打印變量a的值,然後賦值變量b,但是不回會到a腳本再次打印b的值。


(未完待續)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章