start/wait
---------------------------------------------------------------------------------------------------------==============
可以編輯一個vbs指令碼,在其中以隱藏視窗運行批次程式。
------------------------------------------------------------
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c 批次程式名",vbhide
------------------------------------------------------------
將水平線中代碼拷貝到記事本中,儲存為"runbat.vbs"或者其它的名字(副檔名必須是.vbs),然後點擊運行產生的指令碼runbat.vbs,即可隱藏運行指定的批次程式。
這個vbs指令碼也可以在bat環境中直接調用,達到隱藏bat自身的目的。
Dim Wsh
Set Wsh = WScript.CreateObject("WScript.Shell")
WScript.Sleep(0000)
Wsh.Run "sihochina.bat",0,True
'其中sihochina.bat即為你要啟動並執行批處理命令,此時英語這個VBS指令碼放在同一目錄下
Set Wsh=NoThing
WScript.quit
====================================================
代碼二:
====================================================
DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("cmd.exe /C d:\sihochina.bat", 0, TRUE)
'其中d:\sihochina.bat即為你要啟動並執行批處理命令
-----------------------------------------------------------------------------------------------------------------------------========================
可以編輯一個vbs指令碼,在其中以隱藏視窗運行批次程式。
------------------------------------------------------------
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c 批次程式名",vbhide
------------------------------------------------------------
將水平線中代碼拷貝到記事本中,儲存為"runbat.vbs"或者其它的名字(副檔名必須是.vbs),然後點擊運行產生的指令碼runbat.vbs,即可隱藏運行指定的批次程式。
這個vbs指令碼也可以在bat環境中直接調用,達到隱藏bat自身的目的。
批處理隱藏啟動並執行10種思路
1.基礎
HideRun.vbs
--------------------------------------------------------------------------------
CreateObject("WScript.Shell").Run "cmd /cD:\test.bat",0
其中D:\test.bat是你的批處理路徑
HideRun.bat
--------------------------------------------------------------------------------
echo CreateObject("WScript.Shell").Run "cmd /cD:\test.bat",0>$tmp.vbs
cscript.exe /e:vbscript $tmp.vbs
del $tmp.vbs
這個批處理其實不能使其批處理本身隱藏,但是下面大部分隱藏調用批處理的原理和基礎。
HideRun.js
--------------------------------------------------------------------------------
new ActiveXObject('WScript.Shell').Run('cmd /cD:\Test.bat',0);
用Javascript有什麼好處呢?js的字串變數可以用單引號,從而方便命令列作為參數調用,而且js很好的支援多行語句用 ; 分隔寫成一行。要注意的是:js要區分大小寫,方法必須用括弧,結尾必須有分號。所以就成了下面的命令:
--------------------------------------------------------------------------------
mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /cD:\test.bat',0);window.close()"
2.用捷徑
如果要使一個批處理本身隱藏,可以參考附件裡的一個捷徑,修改附件中的相關路徑即可隱藏啟動你的批處理。可以用vbs來建立一個 .lnk,其實用批處理也行(先echo一個vbs出來)
3.利用系統服務
可以用sc建立一個系統服務然後啟動這個服務來啟動批處理。缺點是啟動服務較慢,需要管理員權限
查考這個文章,
http://www.cn-dos.net/forum/view ... =%E6%9C%8D%E5%8A%A1
asbai 兄的大作,極大的方便了我們的使用。
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
runassrv add /cmdline:"C:\Windows\System32\cmd.exe /cD:\test.bat" /name:"mysrv"
net start mysrv
4.利用at計劃任務
用at可以建立一個計劃任務,在不輸入 /interactive 參數可以後台運行。但是建使用at必須有管理員權限
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
at 09:10 "cmd /cD:\Test.bat"
然後在 9:10 系統就會自動後台以SYSTEM許可權運行這個bat
5.利用ftype檔案關聯
綜合上面的技術,使所有批處理都隱藏運行
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
ftype batfile=C:\Windows\System32\mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();"
大家可以討論下下面的思路,目前沒有明確的方法,但是理論上是可行的
6.rundll32
其實這個方法只是理論上估計的,這裡提出來佔個位置,留個記號,等待高手研究
rundll32可以調用 dll 裡的API,如果有個dll可以隱藏run一個exe就可以實現隱藏啟動批處理,呵呵。目前我也沒找到方法。
7.其他使用者
Windows 2k/XP支援多使用者,如果能在後台登陸另一個賬戶的案頭然後運行一個批處理,就能完全達到隱藏的目的
8.bat2vbs
這個方法只是一個不是很成熟的思路。
查考這個文章:
http://www.cn-dos.net/forum/view ... p;highlight=exe2bat
這使我們產生了一個想法:把bat轉換成vbs,然後vbs產生一個臨時bat檔案,然後WScript.Shell.Run隱藏啟動這個臨時bat
9. .NET編譯
參考這個文章:
http://www.cn-dos.net/forum/view ... hlight=script%2Bnet
裡面提到了一個 .NET Warpper,我們完全可以利用系統內建的組件把bat編譯到 exe 當中。如果bat不涉及互動,exe自然就安靜的運行了。