溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解批處理與VBS_JS混編

發(fā)布時間:2021-10-14 10:11:59 來源:億速云 閱讀:150 作者:iii 欄目:編程語言

這篇文章主要介紹“如何理解批處理與VBS_JS混編”,在日常操作中,相信很多人在如何理解批處理與VBS_JS混編問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解批處理與VBS_JS混編”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

讓我們以VBS為例來具體看看這種方法

'&Cls&@Echo off&Start "" Wscript -Nologo -E:Vbscript "%~0"Msgbox "Hello,world!"

將上面的例子保存為Bat或Cmd運(yùn)行,再保存為Vbs或Vbe運(yùn)行,結(jié)果是否一樣呢?
如果讀者已經(jīng)親自測試,就會發(fā)現(xiàn),上面那段代碼在存為批處理文件時(拓展名Bat或Vbs)會先閃一下CMD窗口,再彈出MessageBox;而存為Vbs或Vbe則會直接彈出MessageBox窗口(當(dāng)Wsh默認(rèn)宿主為Cscript時伴隨著CMD窗口的出現(xiàn),作者默認(rèn)該文章的讀者已經(jīng)熟悉Wscript宿主和Cscript的區(qū)別,在此不再贅述)。
讓我們來解讀一下這些命令。http://www.0391yy.com/
Line1:
如果拓展名為Vbs或Vbe,被解釋器當(dāng)作注釋忽略;
如果拓展名為Bat或Cmd,則被解析為四條命令,如下:

‘Cls@Echo offStart "" Wscript -Nologo -E:Vbscript "%~0"

執(zhí)行第一條命令時,由于無法找到 ’ 命令而報錯。但Cmd的特殊的錯誤處理機(jī)制促使其忽略錯誤并繼續(xù)執(zhí)行。
執(zhí)行第二條命令時,屏幕上的命令回顯和錯誤信息被清除。
執(zhí)行到第三條命令時,回顯被關(guān)閉。
執(zhí)行到第四條命令時,開啟一個新的Wscript.EXE腳本宿主并強(qiáng)制將自身當(dāng)Vbscript運(yùn)行。
Line2:
如果拓展名為Vbs或Vbe,則執(zhí)行MsgBox過程。
如果拓展名為Bat或Cmd,則由于無法找到Msgbox命令而報錯,又因無指令可執(zhí)行而退出。
上面的兩行還可以精簡為一行,如下:

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í)行,但有眼尖的讀者可能會注意到,第二行的@Echo off后面多了個2>Nul 3>Nul,這是什么意思呢?其實(shí)就是將錯誤回顯屏蔽掉,以便保證正?;仫@不被錯誤回顯分隔開。
想要詳細(xì)了解2>Nul 3>Nul的含義,請閱讀普及講解重定向。
看到這里,相信讀者已經(jīng)明白了注釋混編法的原理了。
那么,讀者可能會問了,如果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又回來了
'&Set /p str=輸入一個字符串:
'&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 你輸入的字符串的長度是%Strlen%。
'&Echo 演示結(jié)束&Pause

需存為批處理運(yùn)行。
上面的代碼的流程為從上到下執(zhí)行,當(dāng)然Vbs語句可以放到后面去,但是為了可讀性,就交錯放置了。
下面來解讀一下:
Line1:第一行,既有批處理命令又有Vbs語句。Vbs語句的意思是動態(tài)執(zhí)行該Vbs接收到的第一個參數(shù)(即將第一個參數(shù)當(dāng)語句執(zhí)行)。
Line2&3:批處理命令。
Line4:批處理語句,把自身當(dāng)VBS調(diào)用,并執(zhí)行VBS語句:Func1。
**Line5&6&7:**Vbs語句,定義Func1。
Line8&9:批處理命令,回顯、設(shè)置變量。
Line10:批處理語句,執(zhí)行Vbs語句“Strlen wsh.Arguments(1)”并將批處理的Str變量傳遞為第二個參數(shù),然后獲取其回顯。
Line11&12&13:定義Strlen函數(shù)。
Line14&15:批處理命令。

到此,關(guān)于“如何理解批處理與VBS_JS混編”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI