VBScripts彼此交互

时间:2013-11-13 16:14:41

标签: vbscript arguments interaction

所以我经常使用VBScript,并且我有几个调用相同功能的脚本。目前,每个脚本都在底部复制了该功能,但是当我必须更新时,这是一个痛苦,因为我必须更新几个文件(我通常会忘记一些)。有没有办法我可以:
1。让“TestScript1”调用“TestScript2”
2。让“TestScirpt2”从“TestScript1”中获取一个参数(即一个特定的日期变量)
3。让“TestScript2”运行其功能,并将3个不同的参数传递回“TestScript1”

如果我能以某种方式完成所有这些工作并使其适用于与“TestScript2”交互的多个脚本,那么我将获得奖励。

3 个答案:

答案 0 :(得分:0)

我在一些脚本中使用objShell.Exec执行此操作。基本上我有一个以我想要的函数命名的脚本,我从另一个脚本调用它。

在“父脚本”中,我有一个名为runExternal的函数:

Function runExternal(strScript,strComputer)
'strScript is the name of the script/function I'm calling
Set objExec = objShell.Exec("cmd.exe /c cscript.exe """ & strPath & strScript & ".vbs"" " & strComputer)
intDelay = Timer+5
intTimer = Timer 
While objExec.Status = 0 And intTimer <= intDelay
    intTimer = Timer 
Wend 

If objExec.Status = 1 Then 
    strReturn = objExec.StdErr.ReadAll
    writeLog strScript & " returned " & strReturn
Else
    objExec.Terminate 'terminate script if it times out
    writeLog strScript & " timed/errored out and was terminated."
End If
End function 

然后在每个“子”脚本中,我接受通过使用的传递给它的参数:
strComputer = WScript.Arguments(0)
然后输出我这样写:
WScript.StdErr.Write "whatever the output is"

答案 1 :(得分:0)

您是否考虑过使用HTA?如果要加载和组合多个脚本文件,这是一个如何使用HTA的示例:

<html>
<head>
<title>Demo IT</title>

<HTA:APPLICATION
     ID="objShowMe"
     APPLICATIONNAME="HTAShowMe"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
     WINDOWSTATE="maximize"
>

<SCRIPT Language="VBScript" src="testscript2.vbs"/>
<SCRIPT Language="VBScript">

Sub TakeOff
     text = "1 2 3"
     argArray = GiveMeThree(text)
     msgbox argArray(0)
     msgbox argArray(1)
     msgbox argArray(2)
End Sub

</SCRIPT>
</head>

<body>

<h1>In the body</h1>
<input type="button" value="Click me!" onclick="TakeOff">

</body>
</html>

testscript2.vbs

Public Function GiveMeThree(x)
    GiveMeThree = split(x, " ")
End Function

答案 2 :(得分:0)

我认为最好的方法是创建一个Windows Script Component。这将把您的脚本公开为一个完全出炉的COM对象,您可以从任何地方调用它 - VBScript或任何其他支持COM的编程语言。

这是一些示例代码。这是一个扩展名为.wcs的文件。

<?XML version="1.0"?>
<?component error="false" debug="false"?>
<component id="SVInfo">
    <registration
        progid="Tmdean.ScriptFunctions"
        description="Description of your COM object"
        version="1.5"
        clsid="{3267711E-8359-4BD1-84A6-xxxxxxxxxxxx}"/>
        <!-- generate your own GUID to use in the line above -->
    <public>
        <method name="MyMethod"/>
    </public>
    <script language="VBScript">
        <![CDATA[
        Function MyMethod(param1, param2)
            MyMethod = param1 + param2
        End Function
        ]]>
    </script>
</component>

使用以下命令将此文件注册到COM。

regsvr32 scrobj.dll /n /i:file://J:\scripts\scriptfunctions.wcs

然后,您可以使用在脚本组件中定义的ProgID调用VBScript中的方法。

Dim script_functions
Set script_functions = CreateObject("Tmdean.ScriptFunctions")

WScript.Echo script_functions.MyMethod(2, 2)