返回顶部
首页 > 资讯 > 精选 >VBS中Run和Exec有哪些区别
  • 451
分享到

VBS中Run和Exec有哪些区别

2023-06-08 08:06:06 451人浏览 薄情痞子
摘要

这篇文章主要介绍VBS中Run和Exec有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Set ws = CreateObject("WScript.shell&quo

这篇文章主要介绍VBS中Run和Exec有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Set ws = CreateObject("WScript.shell")'这里创建一个对象引用,以便在以下示例代码中使用。'Demon注:这个变量名怎么这么猥琐(WS)

语法:(常识(Demon注:常识这个词我喜欢):作为过程使用时,不要加括号,否则出现编译器错误(参数唯一或没有时加括号不会出错,但建议不要加))

ws.Run(strCommand, [intwindowstyle], [bWaitOnReturn])
[Set objExec =] ws.Exec(strCommand)

WScript.Shell对象的这两个方法:

都可以用来运行程序,且可以带参数。
都可以在程序路径中使用环境变量。
都不能为程序指定工作目录、不能设置优先级(start命令可以)。
要指定工作目录,只能通过改变脚本宿主(wscript.exe/cscript.exe)的当前工作目录:ws.CurrentDirectory = "工作目录"。(常识:工作目录有何意义:1、有些程序需要相应目录下的dll等相关文件支持 2、相对路径问题)

Run和Exec的区别:

Run可以直接运行文件(包括协议文件),会启动相关联的程序打开该文件(没有关联则出错)。start有此功能(更高级,没有关联时会打开“打开方式”对话框)。Exec只能运行程序。

ws.Run "c:\boot.ini"ws.Exec "notepad c:\boot.ini"

Run不仅可以直接运行位于path环境变量目录中的程序,还能运行在注册表App Paths中设置的程序“别名”。start有此功能。Exec不行,只能直接运行位于path环境变量目录中的程序。

ws.Run "iexplore"'iexplore 在 App Paths 中登记了别名。ws.Exec "calc"

Run可以等待程序运行结束再执行下面的命令。start有此功能。Exec不行。

ws.Run "notepad", ,true

Exec运行的程序路径中即使含有空格,也可以不加引号(参数如需引号,它的引号不能省略)。Run、start没有这个本领。(常识:vbs中一个引号字符"本身要用两个引号表示,即写成""。也可以用Chr函数得到引号:chr(34))

ws.Exec "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
ws.Exec """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""
ws.Run  """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""

最大的区别是:Run着重于启动控制(设置窗口形式)。(start听名字知道是为了启动,也可以简单设置窗口最大化、最小化。)Exec着重于后续控制,并着重于控制命令行程序。

run可以设置程序运行时的运行模式(前台后台:是否隐藏窗口)、窗口大小、激活状态(是否获取“焦点”),具体参数请参考手册。
Exec在启动程序后还能对其进行控制:获取运行状态、获取PID、强行中止进程。如果运行的是命令行程序,还能提供对 StdIn/StdOut/StdErr 流的访问:写入执行命令、获取命令输出等。运行命令行程序后只能通过StdIn写入命令,控制台窗口不再接受用户输入。

ws.Run "notepad", 0
'隐藏窗口
ws.Run "notepad", 4
'运行后不激活,不打扰原来的活动窗口

注意,手册上明确指出,Run不能约束所有程序都按它指定的窗口形式运行,有些程序不听它的话,比如iexplore、calc等。运行ieplore时,它会夺取焦点成为活动窗口。Run无法以最小化运行calc。

Set oExec = ws.Exec("mspaint")WScript.Echo oExec.ProcessIdoExec.TerminateWScript.Echo oExec.Status '0为运行,1为结束Set oExec = ws.Exec("ipconfig")WScript.Echo oExec.StdOut.ReadAll

Exec的应用:

Runas自动输入密码:可能是设计时为安全考虑,runas不接收管道传递或从文件重定向得到,输入密码必须手动输入,这个问题困扰了不少人,却又难以解决,用Sendkeys也不一定稳妥(Demon注:我之前也说过很多次,用Sendkeys是不靠谱的,因为无法保证目标窗口一直获得焦点,但是经常见到很多人用,真是不明真相的群众,悲哀)。如果用Exec方法,就能轻松做到自动输入。

Set ws = CreateObject("WScript.Shell")Set oExec = ws.Exec("cmd.exe")oexec.StdIn.WriteLine "runas /user:username setup.bat"oexec.StdIn.WriteLine "passWord"

Exec与Run的结合使用:Exec方法无法隐藏窗口,要得到命令行程序的输出,就会有一个黑呼呼的窗口一闪而过,不仅难看,还会让其他使用者误以为是木马什么的,很不完美。如何解决这个问题呢?就让Exec与Run合作吧!

Set ws = CreateObject("WScript.Shell")host = WScript.FullName'Demon注:这里不用这么复杂吧,LCase(Right(host, 11))不就行了If LCase( right(host, len(host)-InStrRev(host,"\")) ) = "wscript.exe" Then  ws.run "cscript """ & WScript.ScriptFullName & chr(34), 0  WScript.QuitEnd IfSet oexec = ws.Exec( "ipconfig")Msgbox oExec.StdOut.ReadAll, , "ipconfig"'此时不要用WScript.Echo,因为当前是在控制台运行'WScript.Echo的结果会在控制台输出,不会弹出对话框。

vbsRun方法

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

【参数】
object
WshShell 对象。
strCommand
表示要运行的命令行的字符串值。包括要传递到可执行文件的所有参数。
intWindowStyle
可选。表示程序窗口外观的整数值。
请注意,并非所有程序都使用此信息。
bWaitOnReturn
可选。布尔值,表示在继续执行脚本中的下一条语句之前,脚本是否等待执行完程序。
如果设为 true,则在执行完程序后才执行脚本,Run 方法返回由程序返回的任何错误代码。
如果设为 false(默认值),则 Run 方法将自动在启动程序后立即返回 0(不是错误代码)。
 
【说明】
Run 方法返回一个整数。Run 方法启动在新 Windows 进程中运行的程序。
可以让脚本等到程序执行完后再继续执行。这允许您同步运行脚本和程序。
strCommand 参数内的环境变量自动扩展。
如果某个文件类型已正确注册到某个程序中,则对该类型的文件调用 Run 方法时将执行该程序。例如,如果您的计算机系统中装有 Word,则对 *.doc 文件调用 Run 方法时将启动 Word 并加载该文档。
【intWindowStyle 说明 】
0 隐藏一个窗口并激活另一个窗口。
1 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置。第一次显示该窗口时,应用程序应指定此标志。
2 激活窗口并将其显示为最小化窗口。
3 激活窗口并将其显示为最大化窗口。
4 按最近的窗口大小和位置显示窗口。活动窗口保持活动状态。
5 激活窗口并按当前的大小和位置显示它。
6 最小化指定的窗口,并按照 Z 顺序激活下一个顶部窗口。
7 将窗口显示为最小化窗口。活动窗口保持活动状态。
8 将窗口显示为当前状态。活动窗口保持活动状态。
9 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置。还原最小化窗口时,应用程序应指定此标志。
10 根据启动应用程序的程序状态来设置显示状态。
 
【示例 1】

下面的 VBScript 代码用记事本打开当前运行脚本的副本。

Set WshShell = WScript.CreateObject("WScript.Shell")WshShell.Run "%windir%\notepad " & WScript.ScriptFullName

下面的 VBScript 代码与上述代码完成的操作相同,不同之处在于,它指定窗口类型,等待用户关闭记事本,关闭记事本时保存从记事本返回的错误代码。

Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("notepad " & WScript.ScriptFullName, 1, true)

【示例 2】
下面的 VBScript 代码打开一个命令窗口,将路径改为 C:\,并执行 DIR 命令。

Dim oShellSet oShell = WScript.CreateObject ("WSCript.shell")oShell.run "cmd /K CD C:\ & Dir"Set oShell = Nothing

Run 方法:

Run方法有三个参数,
第一个参数是你要执行的程序的路径,
第二个参数是窗口的形式,0后台运行;1正常运行;2最小化;3最大化;缺省的话表示正常运行
第三个参数是表示这个脚本是等待还是继续执行,如果设为了True,脚本就会等待调用的程序退出后再向后执行。

例1:

Set ws = CreateObject("WScript.Shell")ws.Run "notepad",,Truews.Run "iexplore"

例2:隐藏BAT执行窗口

Set ws = CreateObject("WScript.Shell")ws.Run "x.bat",0

例3:

Set ws = CreateObject("WScript.Shell")ws.Run "cmd /c netstat -an>>x.txt",0

例4:

Set ws = CreateObject("WScript.Shell")ws.Run "taskkill /f /im iexplore.exe",0

Exec 方法

例1:运行文件

Set ws = CreateObject("WScript.Shell")
ws.Exec "notepad c:/x.txt" ‘对于Exec应指明程序,此notepad是必须的

例2:运行程序>获取进程PID值>强行结束进程(没有Run+taskkill强:如在记事本未保存的情况下结束进程,Exec会出错,而Run不会)>判断进程是否在运行(这个功能不错)

Set ws = CreateObject("WScript.Shell")Set e = ws.Exec("notepad")MsgBox e.ProcessIde.TerminateWSH.Sleep 1000MsgBox e.Status ‘0为运行,1为结束

例3:直接获取dos命令输出,dos窗口会闪一下,Exec没有窗口控制功能

Set ws = CreateObject("WScript.Shell")Set e = ws.Exec("ipconfig")MsgBox e.Stdout.ReadAll

例4:

Set ws = CreateObject("WScript.Shell")Set e = ws.Exec("cmd /c echo Hi")MsgBox e.Stdout.ReadAll

以上是“VBS中Run和Exec有哪些区别”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: VBS中Run和Exec有哪些区别

本文链接: https://lsjlt.com/news/253169.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • VBS中Run和Exec有哪些区别
    这篇文章主要介绍VBS中Run和Exec有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Set ws = CreateObject("WScript.Shell&quo...
    99+
    2023-06-08
  • linux中fork和exec有哪些区别
    这篇文章主要介绍“linux中fork和exec有哪些区别”,在日常操作中,相信很多人在linux中fork和exec有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux中fork和exec有哪...
    99+
    2023-06-30
  • java中start()和run()的区别有哪些
    这篇文章主要介绍了java中start()和run()的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java是什么Java是一门面向对象编程语言,可以编写桌面应用...
    99+
    2023-06-14
  • QDialog中exec与open的区别有哪些
    这篇文章主要讲解了“QDialog中exec与open的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“QDialog中exec与open的区别有哪些”吧!1. 两者区别的现象注意:...
    99+
    2023-07-05
  • JavaScript中match和exec有什么区别
    JavaScript中match和exec有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整...
    99+
    2023-06-14
  • vue中npm run dev和npm run build有什么区别
    本篇内容介绍了“vue中npm run dev和npm run build有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体如下:...
    99+
    2023-07-04
  • mysql中:=和=有哪些区别
    这篇文章主要介绍了mysql中:=和=有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。:=和=的区别= 只有在set和update时...
    99+
    2024-04-02
  • MyBatis中#{}和${}有哪些区别
    目录前言#{} 和 ${} 的区别#{} 和 ${} 的实例:假设传入参数为 1实例步骤一实例步骤二实例步骤三#{} 和 ${} 的大括号中的值#{} 和 ${} 在使用中的技巧和建...
    99+
    2024-04-02
  • python中start和run方法有什么区别
    今天小编给大家分享一下python中start和run方法有什么区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。结论:启动...
    99+
    2023-06-29
  • js中==和===的区别有哪些
    这篇文章将为大家详细讲解有关js中==和===的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScri...
    99+
    2023-06-15
  • Kotlin中?和!!的区别有哪些
    这篇文章给大家分享的是有关Kotlin中和!!的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言很多同学刚上手使用Kotlin知道它有针对Java NullPointerException的管理,而在...
    99+
    2023-06-14
  • Numpy.array中[:]和[::]的区别有哪些
    小编给大家分享一下Numpy.array中[:]和[::]的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!array([:])>>>&...
    99+
    2023-06-15
  • python中start和run方法的区别
    结论:启动线程,如果对target进行赋值,并且没有重写run方法,则线程start的时候会直接调用target中对应的方法 具体代码如下:1、初始化一个线程 threading.T...
    99+
    2024-04-02
  • vue中npm run dev和npm run build的区别是什么
    这篇文章主要介绍vue中npm run dev和npm run build的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!关于vue的npm run dev和npm run...
    99+
    2024-04-02
  • Python中json.load()和json.loads()有哪些区别
    目录一、图解二、json.loads()用法三、json.load()用法四、此外还有一种json.dumps语法实例一、图解 json.loads():解析一个有效的JSON字符串并将其转换为Python字典 js...
    99+
    2022-06-02
    Python json.load() Python json.loads()
  • DBMS中DDL和DML有哪些区别
    这篇文章主要介绍DBMS中DDL和DML有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是DDL?DDL代表数据定义语言,它定义了数据库结构或数据库模式,可以将数据库中定...
    99+
    2024-04-02
  • Oracle中Cache和Buffer有哪些区别?
    本篇内容主要讲解“Oracle中Cache和Buffer有哪些区别?”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle中Cache和Buffer有哪些区...
    99+
    2024-04-02
  • mysql中or和and有哪些区别
    这篇文章将为大家详细讲解有关mysql中or和and有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 区别:1、本身含义上有差异,or...
    99+
    2024-04-02
  • mysql中5.6和5.5有哪些区别
    本篇内容介绍了“mysql中5.6和5.5有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • mysql中blob和text有哪些区别
    本文小编为大家详细介绍“mysql中blob和text有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql中blob和text有哪些区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作