這篇文章主要介紹“如何理解批處理與VBS_JS混編”,在日常操作中,相信很多人在如何理解批處理與VBS_JS混編問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何理解批處理與VBS_JS混編”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
為企業(yè)提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)營(yíng)銷推廣、競(jìng)價(jià)托管、品牌運(yùn)營(yíng)等營(yíng)銷獲客服務(wù)。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡(luò)營(yíng)銷運(yùn)營(yíng)團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營(yíng)銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營(yíng)銷獲客難題,做到“讓獲客更簡(jiǎn)單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營(yíng)銷”三大難題,同時(shí)降低了營(yíng)銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!
讓我們以VBS為例來(lái)具體看看這種方法
'&Cls&@Echo off&Start "" Wscript -Nologo -E:Vbscript "%~0"Msgbox "Hello,world!"
將上面的例子保存為Bat或Cmd運(yùn)行,再保存為Vbs或Vbe運(yùn)行,結(jié)果是否一樣呢?
如果讀者已經(jīng)親自測(cè)試,就會(huì)發(fā)現(xiàn),上面那段代碼在存為批處理文件時(shí)(拓展名Bat或Vbs)會(huì)先閃一下CMD窗口,再?gòu)棾鯩essageBox;而存為Vbs或Vbe則會(huì)直接彈出MessageBox窗口(當(dāng)Wsh默認(rèn)宿主為Cscript時(shí)伴隨著CMD窗口的出現(xiàn),作者默認(rèn)該文章的讀者已經(jīng)熟悉Wscript宿主和Cscript的區(qū)別,在此不再贅述)。
讓我們來(lái)解讀一下這些命令。http://www.0391yy.com/
Line1:
如果拓展名為Vbs或Vbe,被解釋器當(dāng)作注釋忽略;
如果拓展名為Bat或Cmd,則被解析為四條命令,如下:
‘Cls@Echo offStart "" Wscript -Nologo -E:Vbscript "%~0"
執(zhí)行第一條命令時(shí),由于無(wú)法找到 ’ 命令而報(bào)錯(cuò)。但Cmd的特殊的錯(cuò)誤處理機(jī)制促使其忽略錯(cuò)誤并繼續(xù)執(zhí)行。
執(zhí)行第二條命令時(shí),屏幕上的命令回顯和錯(cuò)誤信息被清除。
執(zhí)行到第三條命令時(shí),回顯被關(guān)閉。
執(zhí)行到第四條命令時(shí),開啟一個(gè)新的Wscript.EXE腳本宿主并強(qiáng)制將自身當(dāng)Vbscript運(yùn)行。
Line2:
如果拓展名為Vbs或Vbe,則執(zhí)行MsgBox過(guò)程。
如果拓展名為Bat或Cmd,則由于無(wú)法找到Msgbox命令而報(bào)錯(cuò),又因無(wú)指令可執(zhí)行而退出。
上面的兩行還可以精簡(jiǎn)為一行,如下:
Msgbox "Hello,world!" '&Cls&@Echo off&Start "" Wscript -Nologo -E:Vbscript "%~0"
這樣的一行代碼也可以正常執(zhí)行,其原理不再贅述。
或者咱就是任性,拆分成多行:
Msgbox "Hello,world!"'&Cls&@Echo off 2>Nul 3>Nul '&Start "" Wscript -Nologo -E:Vbscript "%~0"
這樣的代碼當(dāng)然也可以正常執(zhí)行,但有眼尖的讀者可能會(huì)注意到,第二行的@Echo off后面多了個(gè)2>Nul 3>Nul,這是什么意思呢?其實(shí)就是將錯(cuò)誤回顯屏蔽掉,以便保證正?;仫@不被錯(cuò)誤回顯分隔開。
想要詳細(xì)了解2>Nul 3>Nul的含義,請(qǐng)閱讀普及講解重定向。
看到這里,相信讀者已經(jīng)明白了注釋混編法的原理了。
那么,讀者可能會(huì)問(wèn)了,如果Vbs和Bat要交互執(zhí)行呢?
其實(shí),也是可行的~
看下面的示例代碼:
Execute Wscript.Arguments(0) '&Cls&@Echo off 2>nul 3>nul'&Echo 我是Bat '&Pause'&Cscript -nologo -E:Vbscript "%~0" Func1 Sub Func1 Msgbox "我是Vbs" End Sub '&Echo 我Bat又回來(lái)了 '&Set /p str=輸入一個(gè)字符串: '&For /f %%a in ('Cscript -Nologo -E:Vbscript "%~0" "Strlen wsh.Arguments(1)" "%Str%"') Do Set /A strlen=%%aSub Strlen(String) Wscript.Echo Len(String) End Sub '&Echo 你輸入的字符串的長(zhǎng)度是%Strlen%。 '&Echo 演示結(jié)束&Pause
需存為批處理運(yùn)行。
上面的代碼的流程為從上到下執(zhí)行,當(dāng)然Vbs語(yǔ)句可以放到后面去,但是為了可讀性,就交錯(cuò)放置了。
下面來(lái)解讀一下:
Line1:第一行,既有批處理命令又有Vbs語(yǔ)句。Vbs語(yǔ)句的意思是動(dòng)態(tài)執(zhí)行該Vbs接收到的第一個(gè)參數(shù)(即將第一個(gè)參數(shù)當(dāng)語(yǔ)句執(zhí)行)。
Line2&3:批處理命令。
Line4:批處理語(yǔ)句,把自身當(dāng)VBS調(diào)用,并執(zhí)行VBS語(yǔ)句:Func1。
**Line5&6&7:**Vbs語(yǔ)句,定義Func1。
Line8&9:批處理命令,回顯、設(shè)置變量。
Line10:批處理語(yǔ)句,執(zhí)行Vbs語(yǔ)句“Strlen wsh.Arguments(1)”并將批處理的Str變量傳遞為第二個(gè)參數(shù),然后獲取其回顯。
Line11&12&13:定義Strlen函數(shù)。
Line14&15:批處理命令。
到此,關(guān)于“如何理解批處理與VBS_JS混編”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!