开机VBS调用远程批处理(懂批处理的进)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开机VBS调用远程批处理(懂批处理的进)相关的知识,希望对你有一定的参考价值。
我想做个网吧批处理!
服务器端是这样的
Dim Wsh
Set Wsh = WScript.CreateObject("WScript.Shell")
wsh.run "\\bakserver\smain$\arp\_arp_.EXE"
wsh.run ("\\bakserver\smain$\kill\kill.bat"),0
wsh.run "\\bakserver\smain$\md5\md5.EXE"
wsh.run "\\bakserver\smain$\RamLog\RamLog.EXE"
wsh.run "\\bakserver\smain$\免疫补丁.EXE"
wsh.run ("regedit /s \\bakserver\smain$\reg\cmd.reg")
wsh.run ("regedit /s \\bakserver\smain$\reg\LAN.reg")
wsh.run ("regedit /s \\bakserver\smain$\reg\mmc.reg")
客户机上是这样的
dim wshshell
set wshshell=CreateObject("WScript.Shell")
wscript.sleep(12000)
wshshell.run("\\bakserver\smain$\logo.vbs"),0
以前都可以的,现在不知道怎么不行了..客户机开机启动远程
\\bakserver\smain$\logo.vbs
现在却找不到网络路径....
直接访问又可以访问到Bakserver
请高手指点!
你看这个回答的后面能不能帮你。 参考技术B bu
'
在批处理中调用VBScript(支持获取返回值)
有个帖子简单介绍了利用mshta来调用vbs的方法(链接)。虽该文章作者认为
到此,在bat中使用vbs得到了完全解决。从此可以在bat和vbs间自由的航行了。
但任然无法获取vbs的返回值,可见该方法有一定缺陷。
于是写出该帖子来补充一下下~
先不看这个缺陷,原调用代码的html标签也可以不要(lz最早是看见zhonghua兄使用该方法)
Mshta Vbscript:VBS命令(Close)
感谢zhonghua,我们来看几个例子:
Mshta Vbscript:Msgbox("Hello,world!")(Close)
Mshta Vbscript:CreateObject("SApi.SpVoice").Speak("Hello,world!"&vbNewLine&"你好,世界!")(Close)
Mshta Vbscript:Msgbox("该电脑的设备和驱动器共有"&CStr(CreateObject("Scripting.FileSystemObject").Drives.Count)&"个。")(Close)
注意几点:
1、在例1中,Msgbox语句与后面的(Close)之间无需加任何符号,添加:还会报错。
2、在例2中,虽然SApi.SpVoice函数的.Speak方法严格来说是一个过程,但是因为Mshta接收的参数有限以及其他各种原因,必须用括号包裹而不是空格分隔。
再看一段代码:
@echo off
Setlocal enabledelayedexpansion
::CODER BY 老刘 POWERD BY iBAT
Mshta Vbscript:Msgbox("Hello,world!",1)(Close)
Echo %Errorlevel%
pause
测试者会发现无论点击哪个按钮,返回值都是0。
可能这个例子举得有些牵强,即使有返回值也不一定要从%Errorlevel%来返回是吧~
但是这是批处理获取其他Console程序的结果的方法之一。
既然这种方法不行,那我们为什么不试试另一种方法呢?
我们经常能看到批处理使用For/f+(‘Commands‘)的方法获取程序输出。
那么能否使用这种方法获取VBS代码运行后的返回值呢?
答案是肯定的,首先感谢PCL_Test斑竹。
来看我封装好的代码块:
Set Vbscript=VBS命令
for /f "Delims=" %%a in (
‘MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(close^)‘
) do Set "MsHtaReturnValue=%%a"
Set MsHtaReturnValue
该方法lz最初看到pcl斑竹使用,就拿来封装了下。
使用这种方法就可以获取Vbs代码运行的返回值了~
来修改刚才的例子:
@echo off
Setlocal enabledelayedexpansion
::CODER BY 老刘 POWERD BY iBAT
Set Vbscript=Msgbox("Hello,world!",1)
for /f "Delims=" %%a in (
‘MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)‘
) do Set "MsHtaReturnValue=%%a"
Set ReturnValue1=确定
Set ReturnValue2=取消或关闭窗口
Echo 你点击了!ReturnValue%MsHtaReturnValue%!。
pause
这样就可以正常运行了,鸡冻吧~
但是这样还有一个缺陷,Mshta运行时当前窗口会失去焦点(即当前窗口变灰),
当Mshta运行完毕后,窗口焦点又会恢复。
所以调用次数少或者脚本运行环境的电脑无鼠标操作的时候,可以放心使用该方法获得返回值。
但是如果要大量调用,还需要顺便干干其他什么事情的话,还是单独写一个Vbs调用较好。
以上是关于开机VBS调用远程批处理(懂批处理的进)的主要内容,如果未能解决你的问题,请参考以下文章