VBS+bat后強大的功能


set wshshell=createobject("script.shell")

 

wshshell.run "cmd.exe /c [dos命令]",0,true

 

這是在vbs中執行dos命令,第一個0代表隱藏運行,相當有用的一個參數

 

第二個true代表執行完dos命令后再執行下一條vbs代碼.

 

比如移動,刪除文件,復制文件夾,修改注冊表什么的,最好用dos命令.

 

各有千秋 但總的說來 BAT的描述能力不及VBS 比如說:延時運行某個程序 vbs代碼:

wscript.sleep 12000

set ws=createobject("wscript.shell")

ws.run "D:\admin\system\monitor.vbs" 這只是個例子:運行文件的絕對路徑

 

運行指定文件后程序本身自動退出

 

批處理代碼:

@echo off

ping -n 20 127.1>nul

D:\admin\system\monitor.vbs 這只是個例子:運行文件的絕對路徑

goto :eof

 

這時在任務管理器中你會看到兩個進程

ping.exe 和 cmd.exe

批處理本身沒有延時函數 而是通過 ping.exe實現 並且此時批處理的劣勢就凸現出來 :程序本身運行時會產生一個黑色的dos框 非常不爽 並且要等monitor.vbs運行完后程序本身才能退出(多么的消耗系統資源!!) 此時VBS的優勢非常明顯 從很多方面來說 批處理不及VBS。

 

二者結合

 

先說vbs,

 

vbs功能不是一般的強大,

 

但有點嚴謹,雖然比起其它的語言還不是非常嚴謹,

 

但與bat卻沒有可比性。

 

比如,在vbs中,要執行復制文件的命令,只用vbs就很容易出錯,

 

但是用bat卻不怕出錯,出錯了也沒有關系,

 

set wshshell=createobject("script.shell")

 

wshshell.run "cmd.exe /c [dos命令]",0,true

 

這是在vbs中執行dos命令,第一個0代表隱藏運行,相當有用的一個參數

 

第二個true代表執行完dos命令后再執行下一條vbs代碼.

 

比如移動,刪除文件,復制文件夾,修改注冊表什么的,最好用dos命令.

 

再說說bat中用vbs.

 

首先用bat生成一個vbs文件,

 

vbs文件中如果有:

 

set wshnamed=wscript.arguments.named

 

va=wshnamed.item("c")

 

bat調用vbs時,

 

如果用:

 

*.vbs /c:%a%

 

就表示將bat變量a傳遞給了vbs變量va,

 

這可是一個相當牛的東西哦!

 

vbs和bat還都能生成臨時文件供對方調用,

 

用完了誰都可以就刪,

 

vbs和bat結合好了,前途一片光明

 

這個想法我思考了很久。

 

巧妙利用 bat 和 vbs 的語法特征,讓同一個文件,被 cmd.exe 識別成批處理,讓 wscrpt.exe 識別成 vbs,並且同時符合兩者的語法,並且保證都沒有錯誤,保證兩者的高度兼容。經過一個通宵的努力,我實現了這種 bat/vbs 復合編程。

 

一個 批處理 .vbs 文件,在前面加一段代碼(頭),就變成了 .bat 批處理,注意,沒有生成臨時文件,不用修改任何原有代碼。

 

例子:保存下列代碼為 test.bat,注意是批處理,但是這個批處理卻成功的被 wsh 解析執行

第2 / 4頁

了!

復制內容到剪貼板代碼:

:On Error Resume Next

:Sub bat

echo off & cls

echo Batching_codez_here_following_vbs_rules & pause >nul

echo '>nul & start "" wscript //e:vbscript "%~f0" %*

Exit Sub : End Sub

MsgBox "This is vbs"

for each i in wscript.arguments

wscript.echo i

next

保存代碼為 test.bat,可以看到 echo 出來的東西和 msgbox 出來的消息,呵呵

 

以上代碼只是一個示例,同時執行了 一段 批處理 和 vbs,沒有生成臨時文件。用了大量的 hack 技巧

 

下面粗略解釋下代碼

 

:On Error Resume Next

 

cmd.exe 識別成一段注釋

wscript.exe 這樣識別, : 在vbs語法里代表分行,然后 On Error Resume Next,也就是讓WSH忽略一些錯誤

 

echo '>nul & start "" wscript //e:vbscript "%~f0" %*

 

cmd.exe 識別成:echo一個 ' 到 空設備,也就是什么都不顯示。& 的意思是同時執行,那么同時執行了 start "" wscript //e:vbscript "%~f0" %*,也就是啟動WSH,用VBS語法解析自身。

 

這段代碼的核心思想已經介紹完畢了。下面,為了讓 批處理 以vbs調用其自身后,馬上退出,我們需要 exit 或者 goto :eof,但是 goto call exit 在vbs又是一個關鍵詞,所以我們只能用符合 vbs 語法的 exit sub,所以我們在第二句加一個

:sub bat,作為注釋 cmd.exe 跳過。然后在 6 句加一個 exit sub : end sub,讓 批處理結束,exit 無論接什么參數都會使批處理退出的,同時又符合 vbs 的語法地借宿了一個 sub

那個 echo off & cls ,批處理的意思就是相當於 @echo off ,但是 vbs 不認 @ 符號,所以改成 echo off & cls , vbs 可以解析為,調用一個叫 echo() 的函數,參數為 off & cls ,也就是兩個字符串 off 和 cls 相加

 

Well,接下來,你可以自由地在批處理中書寫vbs腳本了,效率和真正的vbs一樣高!

第3 / 4頁

這段代碼的好處是:不用生成臨時文件。其實用 echo 或者 more 或者 find 來生成臨時vbs很浪費系統資源的,用我寫的這段代碼,就完全免去了這些麻煩。直接混合編程,以 start wscript -e:vbs "%~f0" 為界限,上面寫 批處理,下面寫 vbs,並行不悖

 

 

 

 

 

再說說

bat

中用

vbs. 

 

 

首先用

bat

生成一個

vbs

文件

 

 

vbs

文件中如果有

 

 

set wshnamed=wscript.arguments.named 

 

 

va=wshnamed.item("c") 

 

 

bat

調用

vbs

 

 

如果用

 

 

*.vbs /c:%a% 

 

 

就表示將

bat

變量

a

傳遞給了

vbs

變量

va, 

 

 

這可是一個相當牛的東西哦

 

 

vbs

bat

還都能生成臨時文件供對方調用,

 

 

 

用完了誰都可以就刪,

 

 

 

vbs

bat

結合好了,前途一片光明

 

 

 

 

 

 

 

 

 

這個想法我思考了很久。

 

 

巧妙利用

 

bat 

 

vbs 

的語法特征,

讓同一個文件,

 

cmd.exe 

識別成批處理,

 

wscrpt.exe 

識別成

 

vbs

,並且同時符合兩者的語法,並且保證都沒有錯誤,保證兩者的高度兼容。經過

一個通宵的努力,我實現了這種

 

bat/vbs 

復合編程。

 

 

 

一個

 

批處理

 

 

.vbs 

文件,在前面加一段代碼(頭)

,就變成了

 

.bat 

批處理,注意,沒有生

成臨時文件,不用修改任何原有代碼。

 

 

例子:

保存下列代碼為

 

test.bat

注意是批處理,

但是這個批處理卻成功的被

 

wsh 

解析執行

 

了!

 

復制內容到剪貼板代碼

:On Error Resume Next 

:Sub bat 

echo off & cls 

echo Batching_codez_here_following_vbs_rules & pause >nul 

echo '>nul & start "" wscript //e:vbscript "%~f0" %* 

Exit Sub : End Sub 

MsgBox "This is vbs" 

for each i in wscript.arguments 

wscript.echo i 

next 

保存代碼為

 

test.bat

,可以看到

 

echo 

出來的東西和

 

msgbox 

出來的消息,呵呵

 

 

以上代碼只是一個示例,同時執行了

 

一段

 

批處理

 

 

vbs

,沒有生成臨時文件。用了大量

 

hack 

技巧

 

 

下面粗略解釋下代碼

 

 

 

:On Error Resume Next 

 

 

cmd.exe 

識別成一段注釋

 

wscript.exe 

這樣識別,

 

vbs

語法里代表分行,然后

 

On 

Error 

Resume 

Next

,也就是讓

WSH

忽略一些錯誤

 

 

echo '>nul & start "" wscript //e:vbscript "%~f0" %* 

 

 

cmd.exe 

識別成:

echo

一個

 

 

 

空設備,也就是什么都不顯示。

的意思是同時執行,

那么同時執行了

 

start "" wscript //e:vbscript "%~f0" %*

也就是啟動

WSH

VBS

語法解析

自身。

 

 

這段代碼的核心思想已經介紹完畢了。下面,

為了讓

 

批處理

 

vbs

調用其自身后,馬上退

出,我們需要

 

exit 

或者

 

goto :eof

,但是

 

goto call exit 

vbs

又是一個關鍵詞,所以我們只

能用符合

 

vbs 

語法的

 

exit sub

,所以我們在第二句加一個

 

:sub bat

,作為注釋

 

cmd.exe 

跳過。然后在

 

句加一個

 

exit sub : end sub

,讓

 

批處理結束,

exit 

無論接什么參數都會使批處理退出的,同時又符合

 

vbs 

的語法地借宿了一個

 

sub 

 

那個

 

echo off & cls 

 

,批處理的意思就是相當於

 

@echo off 

,但是

 

vbs 

不認

 

符號,所

以改成

 

echo off & cls 

 

vbs 

可以解析為,調用一個叫

 

echo() 

的函數,參數為

 

off & cls 

也就是兩個字符串

 

off 

 

cls 

相加

 

 

 

Well

,接下來,你可以自由地在批處理中書寫

vbs

腳本了,效率和真正的

vbs

一樣高!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM