如何在VBScript中包含公共文件(类似于C #include)?

时间:2008-11-25 02:23:32

标签: vbscript include

VBScript似乎无法包含公共函数文件。

有没有办法实现这个目标?

8 个答案:

答案 0 :(得分:53)

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

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

答案 1 :(得分:43)

“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

答案 2 :(得分:16)

我知道这是一个老线程,但无论如何我发布了我的答案,所以其他人可以通过“试错”了解我对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中,创建一个名为sub的{​​{1}}并在那里编写您的程序。 在此子例程中,您可以使用其他VBS文件中定义的所有常量和函数。

例如:

MainProgram()

希望你能得到这个想法,我可以帮助一些人写出更好的VBS应用程序:)

答案 3 :(得分:5)

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

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"

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

IIS 5及更高版本还允许script tag包含ASP文件中的其他文件。 (您的VBScript是ASP页面还是Windows脚本?)以下是一个示例:

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

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

答案 7 :(得分:0)

您可以在cscript中明确使用WSF脚本标记:

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

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

<% %>
来自ADOVBS.INC的

标签。