vbscript include的办法实现代码第1/2页
2019-10-26 18:02:20
供稿:网友
任何真正实用的工程开发都必然是多文件的。但是VBScript创建多文件工程要麻烦一点,它对多文件工程,代码复用的支持并不是太好。在C/C++工程里,我们已经习惯了通过一个include语句,并且声明一个函数原形的方式来使用其它模块中的函数,这样一个复杂的工程可以比较容易地分解成一些小的模块,以更容易理解和掌握。VBScript中情况有些不同。这与它的设计目标有关。最初VBScript是用在客户端脚本,以支持与客户端作简单的交互,如简单的输入检查等等。在浏览器里显然没有办法支持对另一个文件中的函数的调用,你不知道那个文件是否存在,何时存在。那么以本地脚本形式执行的VBScript又怎么样呢?想想看这条命令:cscript.exe yourscript.vbs。显然一个VBS运行在一个进程空间里(cscript进程),它也没有办法得到另一个文件中的函数。
认识到了VBScript的局限性,我们来看如何解决它。
第一种需要可能是需要在一个脚本运行的中间直接运行另外一个脚本。这可以通过下面的方法来完成:
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "wscript c:/Test.vbs param1", , True
注意到这里我们Test.vbs运行在另外一个进程空间(wscript进程)里,加上执行当前脚本的WSH,我们一共有两个进程。这是通过WSHShell.Run来做到的,这个方法的原型是:
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
如果时序很重要,你可以在bWaitOnReturn这个参数中指定主脚本是否要等待被执行的脚本运行结束后才能继续。
另一点需要注意的地方是strCommand参数,这个参数是一个复合体,以空格区分各个域。如果需要将运行参数传递给被调用的脚本,应该在第二个空格后面输入。下面的例子显示了如何获取主脚本传递来的参数。对了,是通过WScript.Arguments来访问。WSCript还有其他一些有趣的属性,请记得读一下文档。
Set oArgs = WScript.Arguments
For i = 0 to oArgs.Count - 1
WScript.Echo oArgs(i)
Next
关于参数解析,这里给出一个Windows 2000 support tools中的一个脚本的例子。你可以复用这个函数,以解析任何以/ArgName:Value形式指定的参数。
' searches for and returns the value of a command line argument of the form
' /argName:value from the supplied array. erases the entry in the array so
' that only untouched entries remain.
function GetArgValue(argName, args())
dim a
dim v
dim argNameLength
dim x
dim argCount
dim fullArgName
fullArgName = "/" & argName & ":"
argCount = Ubound(args)
' Get the length of the argname we are looking for
argNameLength = Len(fullArgName)
GetArgValue = "" ' default to nothing
for x = 0 To argCount
if Len(args(x)) >= argNameLength then
a = Mid(args(x), 1, argNameLength)