1. 程式人生 > 其它 >DOS-批處理隱藏自身視窗

DOS-批處理隱藏自身視窗

批處理隱藏執行效果程式碼,防止出現黑視窗不建議非法用途,可以用來執行命令,提供使用者體驗。

@echo oFF 
::code by LZ-MyST QQ:8450919 BLOG:http://hi.baidu.com/lzmyst http://www.clxp.net.cn 
if "%1" neq "1" ( 
>"%temp%\tmp.vbs" echo set WshShell = WScript.CreateObject^(^"WScript.Shell^"^) 
>>"%temp%\tmp.vbs" echo WshShell.Run chr^(34^) ^& %0
^& chr^(34^) ^& ^" 1^",0 start /d "%temp%" tmp.vbs exit ) ::從這裡開始,就是你的批處理程式碼了,DOS黑框一閃而過,轉到後臺運行了 pause ::你會在工作管理員看到有一個隱藏視窗的CMD程序

執行bat時隱藏cmd視窗的方法

執行bat時隱藏cmd視窗的方法 可以編輯一個vbs指令碼,在其中以隱藏視窗執行批處理程式。

 
Set ws = CreateObject("Wscript.Shell") 
ws.run "cmd /c 批處理程式名",vbhide 

將上面程式碼拷貝到記事本中,儲存為"runbat.vbs"或者其它的名字(副檔名必須是.vbs),然後點選執行生成的指令碼runbat.vbs,即可隱藏執行指定的批處理程式。
這個vbs指令碼也可以在bat環境中直接呼叫,達到隱藏bat自身的目的。
自己總結一下,做幾個例子,有興趣的去試驗一下啊!

 
Set ws = CreateObject("Wscript.Shell") 
wscript.sleep 1200 ws.run "cmd /c start winrar.exe",vbhide 
wscript.sleep 2200 ws.run "cmd /c start msimn.exe",vbhide 
wscript.sleep 1200 ws.run "cmd /c start iexplore.exe",vbhide 

下面來幾個高手整理的

幾種隱藏批處理執行視窗的方法 .
(1)通過批處理命令實現。缺點:會看到一個視窗一閃而逝。優點:簡單,直接新增即可。

@echo off 
if
"%1"=="h" goto begin start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit :begin ::以下為正常批處理命令,不可含有pause set/p等互動命令 pause

(2)利用vbs指令碼實現隱藏。缺點:呼叫麻煩點。優點:基本看不到痕跡(非絕對的,指一般使用者)

HideRun.vbs

CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0

其中D:/test.bat是你的批處理路徑

.....................................................................................................................................
另一思路為把bat轉換成vbs,然後vbs生成一個臨時bat檔案,然後WScript.Shell.Run隱藏啟動這個臨時bat。
HideRun.bat

echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
cscript.exe /e:vbscript $tmp.vbs
del $tmp.vbs

這個批處理其實不能使其批處理本身隱藏,但是下面大部分隱藏呼叫批處理的原理和基礎。
HideRun.js

new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);

用Javascript有什麼好處呢?js的字串變數可以用單引號,從而方便命令列作為引數呼叫,而且js很好的支援多行語句用 ; 分隔寫成一行。要注意的是:js要區分大小寫,方法
必須用括號,結尾必須有分號。所以就成了下面的命令:

mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"
 

通常系統管理員會向用戶端推送一些指令碼並執行,或者拷貝批處理檔案到客戶端由使用者自己執行。但是大部分指令碼在執行時會彈出黑色背景的DOS視窗,這會讓不少使用者不知所
措,甚至誤操作關閉正在執行的視窗。好在批處理檔案的DOS視窗是可以隱藏的,以下是幾種隱藏批處理執行視窗的方法。
1.基礎
HideRun.vbs
CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0
其中D:/test.bat是你的批處理路徑
另一思路為把bat轉換成vbs,然後vbs生成一個臨時bat檔案,然後WScript.Shell.Run隱藏啟動這個臨時bat。
HideRun.bat

echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
cscript.exe /e:vbscript $tmp.vbs
del $tmp.vbs

這個批處理其實不能使其批處理本身隱藏,但是下面大部分隱藏呼叫批處理的原理和基礎。
HideRun.js
new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);
用Javascript有什麼好處呢?js的字串變數可以用單引號,從而方便命令列作為引數呼叫,而且js很好的支援多行語句用 ; 分隔寫成一行。要注意的是:js要區分大小寫,方法
必須用括號,結尾必須有分號。所以就成了下面的命令:
mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"
2.用快捷方式
如果要使一個批處理本身隱藏,可以參考附件裡的一個快捷方式,修改附件中的相關路徑即可隱藏啟動你的批處理。可以用vbs來建立一個 .lnk,其實用批處理也行(先echo一個
vbs出來)
3.利用系統服務
可以建立一個系統服務然後啟動這個服務來啟動批處理。缺點是啟動服務較慢,需要管理員許可權
runassrv add /cmdline:"C:/Windows/System32/cmd.exe /c D:/test.bat" /name:"mysrv"
net start mysrv
4.利用at計劃任務
用at可以建立一個計劃任務,在不輸入 /interactive 引數可以後臺執行。但是建使用at必須有管理員許可權
at 09:10 "cmd /c D:/Test.bat"
然後在 9:10 系統就會自動後臺以SYSTEM許可權執行這個bat

5.利用ftype檔案關聯
ftype batfile=C:/Windows/System32/mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();"
6.其他使用者
Windows 2k/XP支援多使用者,如果能在後臺登陸另一個賬戶的桌面然後執行一個批處理,就能完全達到隱藏的目的
7.編譯成可執行檔案
不少方法可以實現,可以直接利用的工具有 Quick Batch file compiler。