【问题标题】:How do I include a common file in VBScript (similar to C #include)?如何在 VBScript 中包含一个通用文件(类似于 C#include)?
【发布时间】:2010-09-23 21:20:54
【问题描述】:

VBScript 似乎无法包含通用函数文件。

有没有办法做到这一点?

【问题讨论】:

标签: vbscript include


【解决方案1】:

您可以在要包含其他文件的每个文件中创建一个(相对)小函数,如下所示:

sub includeFile (fSpec)
    dim fileSys, file, fileData
    set fileSys = createObject ("Scripting.FileSystemObject")
    set file = fileSys.openTextFile (fSpec)
    fileData = file.readAll ()
    file.close
    executeGlobal fileData
    set file = nothing
    set fileSys = nothing
end sub

然后使用它来包含特定文件 - 这些文件就像它们是内联的一样被执行。

includeFile "commonapi.vbi"
includeFile "dbcalls.vbi"

它基本上是打开文件,将全部内容读入一个字符串,然后执行该字符串。 I/O 调用没有错误处理,因为这类事情通常在程序启动时完成一次,如果出现问题,您希望失败。


注意includeFile函数可以压缩成:

Sub includeFile(fSpec)
    With CreateObject("Scripting.FileSystemObject")
       executeGlobal .openTextFile(fSpec).readAll()
    End With
End Sub

甚至是(如果你不反对排长队的话):

Sub includeFile(fSpec)
    executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
End Sub

【讨论】:

    【解决方案2】:

    “Windows 脚本宿主”框架(如果你想这样称呼它)提供了一个 XML 包装文档,它在常规 vbs 文件上添加了功能。其中之一是能够包含 VBscript 和 Jscript 风格的外部脚本文件。我从来没有深入了解它,但我认为它会做你想做的事。 http://msdn.microsoft.com/en-us/library/15x4407c(VS.85).aspx

    您可以包含 JavaScript、VBScript 或其他 WScript 脚本语言的模块。

    示例 WSF 文件:

    <job id="IncludeExample">
       <script language="JavaScript" src="sprintf.js"/>
       <script language="VBScript" src="logging.vbs"/>
       <script language="VBScript" src="iis-queryScriptMaps.vbs"/>
    </job>
    

    如果上面的文件名为“iis-scriptmaps.wsf”,用cscript.exe这样运行:

    cscript.exe  iis-scriptmaps.wsf
    

    【讨论】:

    • 是的,这绝对是要走的路。我过去一直使用 wsf 文件来包含脚本库。
    • 那么你能像运行 vbs 一样运行 wsf 程序吗(即是否存在基于文件扩展名的关联)?我查了一下,但我的 Windows 机器正在工作,我现在在家里运行 Linux。
    • +1 - 前段时间我做了一些调查,发现 wsf 文件是唯一的。
    • 在 Windows Server 2003 中工作,不敢相信我现在才发现这个。
    【解决方案3】:

    我知道这是一个旧线程,但我还是发布了我的答案,以便其他人可以通过“反复试验”了解我对 VBS 和 WSF 文件的了解:

    因此,要拥有与其他语言相同的功能,您可以创建一个 WSF 文件并在其中包含所有 VBS 库,包括主程序。

    类似这样的:

    <job id="MainProg">
      <script language="VBScript" src="Constants.vbs"/>
      <script language="VBScript" src="FileFunctions.vbs"/>
      <script language="VBScript" src="SendMail.vbs"/>
      <script language="VBScript" src="LoggingFunctions.vbs"/>
      <script language="VBScript" src="MainProgram.vbs"/>   
      <script language="VBScript">
        ' Here we call the main program
        MainProgram()
      </script>
    </job>
    

    Constants.vbs 中收集您以后要使用的所有常量,并在其他 VBS 文件中定义您的函数。在您的主程序文件MainProgram.vbs 中,创建一个名为MainProgram()sub 并在那里编写您的程序。 在这个子例程中,您可以使用在其他 VBS 文件中定义的所有常量和函数。

    例如:

    sub MainProgram()
      ' Local variables
      Dim strMessage, strSendTo, strSubject
      ' OpenFile is a function from FileFunctions.vbs
      strMessage = OpenFile("C:\Msg\message.html")
      strSendTo = "email.address@yourdomain.com"
      strSubject = "Daily report - " & date
      ' SendMessage is a function from SendMail.vbs
      ' cFrom and cServer are constants from Constants.vbs
      SendMessage(cFrom, strSendTo, strSubject, strMessage, cServer)
      ' Logger is a function from LoggingFunctions.vbs
      Logger("Daily report sent - " & now())
    end sub
    

    希望你能明白我的想法,我可以帮助一些人编写更好的 VBS 应用程序 :)

    【讨论】:

      【解决方案4】:

      在接受的答案的基础上,这是一个包含子过程,它采用相对于脚本位置而不是工作目录的路径:

      Sub include( relativeFilePath ) 
          Set fso = CreateObject("Scripting.FileSystemObject")
          thisFolder = fso.GetParentFolderName( WScript.ScriptFullName ) 
          absFilePath = fso.BuildPath( thisFolder, relativeFilePath )
          executeGlobal fso.openTextFile( absFilePath ).readAll()
      End Sub
      

      请注意,您还可以在路径中使用 ... 部分来将文件包含在父文件夹等中,并且从哪里启动脚本并不重要。示例:

      include "..\Lib\StringUtilities.vbs"
      

      【讨论】:

        【解决方案5】:

        这个 VBScript 是在本地使用,还是提供经典的 ASP 风格?

        如果是经典的 ASP,你可以使用 SSI 来做:

        <!-- #include virtual="/PathTo/MyFile.vbs" -->
        

        【讨论】:

        • 它实际上是一个本地脚本(在 wscript 或 cscript 下),但我愿意接受所有建议。是在整个 ASP 文件的上下文中加载的吗?换句话说,MyFile.vbs 中的函数在#include 之后是否可用?
        • SSI 基本上只是将文件附加在一起。它发生在脚本执行之前。
        【解决方案6】:

        您可以使用 ExecuteGlobal 函数在全局命名空间中运行任意 VBS 代码。可以在这里找到一个例子:http://www.source-code.biz/snippets/vbscript/5.htm

        【讨论】:

          【解决方案7】:

          IIS 5 及更高版本还允许script tag 包含来自 ASP 文件的其他文件。 (您的 VBScript 是 ASP 页面还是 Windows 脚本?)这里有一个例子:

          <script language="VBScript" runat="server" src="include.asp"></script>
          

          行为和规则与服务器端包含的有点不同。注意:我从未真正尝试过使用经典 ASP 中的这种语法。

          【讨论】:

            【解决方案8】:

            你绝对可以在 cscript 中使用 WSF 脚本标签:

            <script language="VBScript" src="ADOVBS.INC"/>
            

            如果您使用 ADOVBS.inc 进行 ADODB 访问,请确保删除

            <% %>
            

            来自 ADOVBS.INC. 的标签

            【讨论】:

              猜你喜欢
              • 2014-10-30
              • 2014-04-15
              • 2014-05-03
              • 2011-12-07
              • 2011-07-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多