我以前一直以為bat不能像Linux的shell一樣設(shè)置函數(shù)并且調(diào)用,事實上我發(fā)現(xiàn)這是可以的。不過由于批處理的特性是一行一行執(zhí)行的,這種label的函數(shù)必須要寫在文本的最后。如果寫在了批處理命令的前面,bat會逐行運行里面的命令的。寫在文檔的最后面,并且在“函數(shù)區(qū)域”前跳過這些代碼。
創(chuàng)新互聯(lián)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計,高端網(wǎng)站設(shè)計,廣告投放等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十年的網(wǎng)站開發(fā)和建站經(jīng)驗,助力企業(yè)信息化建設(shè),成功案例突破超過千家,是您實現(xiàn)網(wǎng)站建設(shè)的好選擇.(順便吐槽一下,這種函數(shù)的寫法和linux的shell很不一樣,shell的function中的命令必須寫在命令的前面,讓shell逐行運行一次,才能在后面的命令中被人調(diào)用。)
函數(shù)的寫法:
::在這個例子中我試圖寫的一個函數(shù)起名為testfunction,它的操作就是運行一個echo命令。
::使用call命令,并且在后面寫入函數(shù)名,函數(shù)名的前方寫一個:代表這是一個label。
call :testfunction
::這個goto命令讓批處理在運行的時候跳過所有函數(shù)的部分。
goto EOF
::從下面一行開始就是函數(shù)的部分,它們應該是bat腳本的最后部分,理論上不應該在下方再寫任何的命令了。首先如同goto的命令一樣,首先要先寫一個lable
:testfunction
echo Test function is running.
rem exit /b 會讓程序跳轉(zhuǎn)到調(diào)用函數(shù)的命令處,而不是直接退出程序。
exit /b
:EOF
::以上就是示例腳本的所有內(nèi)容。
當然你可以不把函數(shù)內(nèi)容寫在這個bat中,而是另外寫一個bat文件,然后call這個bat的絕對路徑,那也是可以的。為了方便我就暫時稱呼我運行的腳本名字為a.bat,而調(diào)用的腳本為b.bat。
a.bat的內(nèi)容是。
set a=aaa
call b.bat
echo %b%
pause
而b.bat的內(nèi)容是
echo %a%
set b=bbb
在這兩個腳本中a腳本和b腳本各自定義了一個變量,而沒有定義另外一個腳本中定義的變量,但是echo的又互相是對方腳本中定義的變量。如果只有單獨的腳本,兩個腳本的echo命令是返回不了任何內(nèi)容的。但是如果你運行了a腳本并且調(diào)用了b腳本,可以發(fā)現(xiàn),call調(diào)用的腳本之間的變量是可以互通的。不過腳本之間的goto的label不能互通,即你不能在a腳本中g(shù)oto到b的一個label中去。
而且不能不寫call命令,如果不寫而是直接寫b腳本的路徑,bat依舊可以運行,不過運行完b腳本之后,整個批處理就退出了。例如我們將a腳本中的call b.bat中的call去掉,那么腳本只會打印變量a的值,然后賦值變量b,但是不回會到a腳本再次打印b的值。
通過set /p 命令去獲取另外一個文本文件里的值
寫法是:
set /p var= 這樣file.txt里的值就到了var這個變量里去了,不過這個寫法要求txt只有一行,如果有多行,那么也只會取第一行的內(nèi)容。 那如果想要其他的行,那么這個就要用到for循環(huán)了。通過for循環(huán)可以讀取文本文件(或一個命令的結(jié)果)每一行的特性,將一行的內(nèi)容賦值到一個變量里,不過如果光寫for循環(huán)而不使用計數(shù)器的話,那么變量的值會被反復覆蓋,僅保留最后一行的值。 set num=0 for /f "tokens=1" %%i in ('wmic LogicalDisk where "Caption='C:'" get Size ^| find /v /i "size"') do ( set /a num=!num!+1 if !num!==1 (set C_size=%%i) ) 要注意的是計數(shù)器由于是不停的變化的,因此要用延時變量,用!包起來而不是%,而for循環(huán)的變量是%%連續(xù)兩個百分號表示的。如果輸入的命令中有管道命令|,要用轉(zhuǎn)移符^轉(zhuǎn)譯。 for的token參數(shù)可以決定一行根據(jù)指定的分隔符(默認是空格)分割成幾段,取第幾段。如果你寫的是表格的話,那就是第幾列,而num計數(shù)器可以在if里找行。這樣的話這個循環(huán)就能取出列和行中的指定數(shù)據(jù),賦值到一個變量里。 在bat中調(diào)用vbs。 當然本身的命令是非常簡單的直接call就可以了,call xxx.vbs 不過這里要說的是將bat中的一些變量的值傳遞到vbs中去, 文件里調(diào)用 例如: 在bat中 set a=testmessage call b.vbs /messageargs:%a% 在vbs中用 set wshnamed=wscript.arguments.named msgbox wshnamed.item("messageargs") 這樣的寫法來獲取bat變量。 以管理員身份運行bat %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit 另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞名稱:BAT腳本的一些技巧寫法-創(chuàng)新互聯(lián)
URL標題:http://weahome.cn/article/idoei.html