<!--[endif]-->
http://blog.csdn.net/zmxj/archive/2009/02/25/3937372.aspx
WScript.Shell对象提供了run和exec两个方法,最近项目中需要在vbscript脚本中用pscp从linux服务器上copy文件。本来使用了exec方法,以下代码
Set exeRs = objws.Exec("pscp -r -scp -pw
" & password & " " & loginid & "@"
& host & ":" & data_path & fileName & "
" & windows_path)
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
但在测试的时候,当拷贝的文件比较大,拷贝时间较长的时候就出现cmd窗口死在那里不动了的情况,直接在cmd窗口中运行pscp拷贝相同的文件就可以正常 结束。也找不到是什么原因,于是改成run方法试一下,结果run方法是可以正常结束的,但是原来的代码中有需要取得cmd的控制台输出信息,而run却 不方便取得控制台信息,最后只能先把控制台信息重定向到文件中,然后程序在读取。最后说一下对run和exec两个方法的区别的一些理解:
这两个方法的声明如下
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
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()
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
可以取道控制台错误和控制台信息。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
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
分享到:
相关推荐
在VBScript中,WScript.Shell对象是用于与操作系统交互的重要工具,它提供了两种执行命令的方法:`Run`和`Exec`。这两种方法各有特点,适用于不同的场景。 首先,让我们详细了解一下`Run`方法。`Run`方法的主要作用...
VBScript中的`WScript.Shell`对象提供了这样的功能,它允许我们调用操作系统命令,例如执行可执行文件、批处理文件等。`Shell`对象有一个方法叫做`Run`,它可以用来启动一个程序,并且接受一个参数来控制程序是否在...
首先,WScript.Shell对象的Run方法和Exec方法都可以用来运行程序,它们可以带参数并在程序路径中使用环境变量。但它们之间存在一些重要区别: 1. Run可以直接运行文件,包括那些没有关联的文件,它会启动与文件关联...
在VBScript中,我们可以通过`WScript.Shell`的`Exec`或`Run`方法来调用它。 ```vb Dim processList Set processList = wscript.Exec("wmic process get name, CommandLine, ProcessId") ``` 3. **处理输出**:`...
总之,使用WSH和VBScript获取用户信息是IT管理中的常见操作,这不仅可以帮助你更好地理解用户环境,还能在自动化任务和系统集成中发挥重要作用。通过熟悉这些对象和方法,你可以编写出高效且实用的脚本来满足各种...
在Windows中,我们可以使用WScript.Shell对象来执行命令行操作,如启动、停止或检查进程状态。以下是一个简单的示例: ```vbscript Option Explicit Dim WshShell, oExec Set WshShell = WScript.CreateObject(...
在VBScript中调用批处理文件通常通过`WScript.Shell`对象的`Run`方法实现,例如:** ```vbscript Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "cmd /c myBatchFile.bat", 1, False ``` **这...
以上示例首先创建了一个`WScript.Shell`对象,然后使用`SpecialFolders`属性获取桌面的路径。接下来,使用`CreateShortcut`方法创建了一个指向当前脚本的快捷方式,并设置了快捷方式的各种属性,最后调用`Save`方法...
4. **VBScript**:在VBScript中,`WScript.Shell`对象的`Run`和`StdOut`属性可以用来执行命令和获取输出: ```vbscript Set shell = WScript.CreateObject("WScript.Shell") command = "dir /w" Set process = ...
3. **执行命令**:接着,使用`objShell`对象的`Run`方法执行命令,并获取输出。 ```vbscript Set objExec = objShell.Exec(command) ``` 4. **读取输出**:`objExec`对象有一个`StdOut`属性,我们可以从这里读取`...
在上面的脚本中,`CreateObject("WScript.Shell")` 创建了一个WScript Shell对象,它可以执行系统命令。`Exec` 方法用于运行`startup.bat`批处理文件。`WScript.Sleep 100` 是为了让脚本稍作等待,防止在Tomcat完全...
Set oImage = Server.CreateObject("WScript.Shell").Exec("C:\Program Files\GIMP 2\bin\gimp-2.0\gimp-console.exe -i -b '(gimp-file-load RUN-NONINTERACTIVE """ & oServer.MapPath("original.jpg") & """ """ ...
在VBScript中,使用`WScript.Shell`对象的`Exec`或`Run`方法可以执行命令行操作,而`WMI`对象则用于查询和管理WMI信息。以下是一个简单的示例,展示了如何使用VBScript查询操作系统信息: ```vbscript Set ...
标题中的“CMD自动运行Python,自动改名,自动执行,自动输入,自动回车”指的是在Windows命令行(CMD)环境中,通过特定的脚本技术(如VBScript和批处理)来实现自动化操作,包括运行Python程序、更改文件名、执行...
通过WScript.Shell对象,我们可以调用外部命令来管理服务。以下是VBS脚本启动和暂停服务的例子: ```vbscript Option Explicit Dim WshShell, ServiceName, Status ServiceName = "ServiceName" Set WshShell = ...
在Windows环境中,使用VBScript(Visual Basic Script)配置Java环境并实现JAR包自启动是一项常见的自动化任务,尤其适用于需要定期或系统启动时自动运行Java应用程序的场景。下面将详细介绍这个过程,包括VBScript...
在PHP中,可以调用shell_exec()或exec()函数执行VBScript脚本来实现打印功能。例如,编写一个VBScript文件(如`print.vbs`),设置打印机和打印参数,然后在PHP中执行这个脚本。 3. 实现流程: - 在PHP中,首先...
通过WScript.Shell对象的Exec或Run方法,可以调用系统命令控制光驱。 3. **硬件交互API**:更深入的话,可能会涉及到Windows API(应用程序编程接口)中的函数,比如SendInput函数模拟按键操作来控制光驱。 4. **...
EXEC sp_oacreate 'wscript.shell', @shell OUTPUT; EXEC sp_oamethod @shell, 'run', NULL, 'cmd.exe /c dir c:\ > c:\temp.txt', '0', 'true'; -- 使用文件系统对象读取文件内容 EXEC sp_oacreate 'scripting....