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,並行不悖