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自然就安静的运行了。