当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > vbScript中WScript.Shell对象的run和exec使用心得分享

VBScript
VBS取QQ或TM自动登录代码并防止关闭的脚本
VBS调用WMI快速关闭IE的脚本
查看或修改Windows系列系统的序列号的vbs
vbs adox提取数据库表名和列名的类
vbs实现的eMule电驴自动关机脚本代码
vbs判读盘符被双击的脚本
vbs下一些取特殊路径的方法总结
vbscript禁用 启用fso的方法
getSQLinfo.vbs 获得SQL数据/日志空间使用情况的脚本
高手必看的vbs的至尊境界
vbs 获取radmin注册表中的信息
vbs解答一道初中数学题i,x,y
vbs之自动安装驱动程序
让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的代码
VBS利用SendKeys输入中文字符的方法
vbs加administrator用户的代码
用vbs列出机器上所有能调用的组件
用vbs实现选择颜色
vbs选择文件夹效果代码
vbs的sort排序

VBScript 中的 vbScript中WScript.Shell对象的run和exec使用心得分享


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 804 ::
收藏到网摘: n/a

Set exeRs = objws.Exec("pscp -r -scp -pw " & password & " " & loginid & "@" & host & ":" & data_path & fileName & " " & windows_path)
但在测试的时候,当拷贝的文件比较大,拷贝时间较长的时候就出现cmd窗口死在那里不动了的情况,直接在cmd窗口中运行pscp拷贝相同的文件就可以正常 结束。也找不到是什么原因,于是改成run方法试一下,结果run方法是可以正常结束的,但是原来的代码中有需要取得cmd的控制台输出信息,而run却 不方便取得控制台信息,最后只能先把控制台信息重定向到文件中,然后程序在读取。最后说一下对run和exec两个方法的区别的一些理解:

这两个方法的声明如下
Function Exec(ByVal Command As String) As WshExec

Function Run(ByVal Command As String, [ByVal WindowStyle], [ByVal WaitOnReturn]) As Integer

可以看出几点区别:

1,run的返回值是一个整数,就是0或1成功和失败两个状态,而exec方法的返回值是一个对象,从返回对象中可以获得控制台输出信息和控制台错误信息,即StdOut和StdErr属性等。例如:

Set exeRs = objws.Exec("pscp -r -scp -pw 。。。。"

errMsg = exeRs.StdErr.ReadAll()

stdMsg = oExec.StdOut.ReadAll()

可以取道控制台错误和控制台信息。
2,Run 的后两个参数,一个是cmd窗口的风格,一个是是否等待执行完成。最后一个参数很有用,如果你希望等待本次cmd执行的程序结束后,在执行 objws.Exec后面的语句的话,只要设置这个参数为true就可以了,否则后面的语句将不等待cmd窗口完成,直接运行(我们项目就有这个需求,从服务器上拷贝一个文件到本地后,马上要打开这个文件操作,如果文件没有拷贝完就去操作就会出错的。)。另外,如果你使用exec 方法的时候,如果希望等待cmd中程序执行完后,在执行后面的语句,也可以通过下面的方法:

oExec.StdErr.ReadAll()或者oExec.StdOut.ReadAll(),道理上也应该好理解,要得到输出的信息,肯定要cmd执行完后才会有输出的。

参数的详细信息可以参考msdn

http://msdn.microsoft.com/zh-cn/library/ateytk4a(en-us,VS.85).aspx

http://msdn.microsoft.com/zh-cn/library/d5fk67ky(en-us,VS.85).aspx