2013-03-14 70 views
1

我想包括一个VBscript到另一个VBscript(有点模拟VBS中的OO),在网上发现了一些东西,这对我来说似乎还行。我一直在ExecuteGlobal行收到“预期声明”误差:ExecuteGlobal预期的陈述错误VBscript

Dim scriptLocation 

Sub Main 
    scriptLocation ="script2.vbs" 
    Include(scriptLocation) 
End Sub 

Sub Include (strFile) 
    Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject") 
    Dim vbsFile : Set vbsFile = fsObj.OpenTextFile(strFile, 1, False) 
    Dim myFunctionsStr : myFunctionsStr = vbsFile.ReadAll 
    vbsFile.Close 
    Set vbsFile = Nothing 
    Set fsObj = Nothing 
    ExecuteGlobal myFunctionsStr 
End Sub 

任何人任何想法?

+0

调用ExecuteGlobal之前'myFunctionsStr'的内容是什么?您是否尝试过使用'HelloWorld()'函数来检查代码是否在原则上工作?此外,上述绝对不是你的整个代码,因为它根本不会做任何事情。 – 2013-03-14 12:43:23

+0

的内容应该是:myFunctionsStr = vbsFile.ReadAll,它应该用Main子文件加载另一个vbs文件。 – Bulki 2013-03-14 12:58:52

+0

我可以看到它应该做什么。我在问什么'strFunctionsStr'的实际**值**是在文件被读取后。在ExecuteGlobal指令前添加一行'WScript.Echo strFunctionsStr'。 – 2013-03-14 14:38:30

回答

3

ExecuteGlobal线一条错误消息可能意味着:

  1. 你成功地搞乱了ExecuteGlobal声明了。最可靠的方法是:添加参数列表(),就像你所做的Include Sub呼叫
  2. 你加载到myFunctionStr的代码是怪罪。如果你的链接/多个包含VBScript错误处理的这个'特性',使得找到罪魁祸首很困难。简单的方法:用cscript运行'库'文件。

顺便说一句:在OOP和包含代码(库/模块)之间没有必然的关系。

+0

第2点帖子可能是解决方案。如果你运行你想包含的代码,那么你可能会得到相同的错误信息。 ExecuteGlobal命令仅从包含的文件中继错误消息。 – Sourcery 2013-11-07 09:43:52

1

内建子ExecuteGlobal没有错。试试这个:

ExecuteGlobal "*" 

将会弹出预期的声明错误。但是,正如你所看到的那样,这个问题存在于字符串中。所以,只需调试您的script2.vbs

+0

P.S.一个更友好的建议,不要相信大众对OOP的看法,有不同的OOP概念,VBS拥有自己强大的OOP。 – 2013-03-14 16:34:36

0

尝试在HexEditor中打开script2.vbs。如果您的脚本使用UTF-8编码,那么在开始时文件包含0x {ef bb bf}。方法.ReadAll只读取所有从文件到myFunctionStr,包括3个字节。从字符串中删除该字节或将您的script2.vbs转换为ANSI。