pax*_*blo 54
您可以在要包含其他文件的每个文件中创建(相对)小函数,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
然后使用它来包含特定文件 - 这些文件就像它们是内联的一样执行.
includeFile "commonapi.vbi"
includeFile "dbcalls.vbi"
Run Code Online (Sandbox Code Playgroud)
它基本上打开文件,将整个内容读入一个字符串,然后执行该字符串.在I/O调用上没有错误处理,因为这种东西通常在程序启动时完成一次,如果出现包含它的问题,你想要失败.
请注意,该includeFile函数可以压缩为:
Sub includeFile(fSpec)
With CreateObject("Scripting.FileSystemObject")
executeGlobal .openTextFile(fSpec).readAll()
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
或者甚至(如果你不喜欢长线):
Sub includeFile(fSpec)
executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
End Sub
Run Code Online (Sandbox Code Playgroud)
Ric*_*d B 45
"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>
Run Code Online (Sandbox Code Playgroud)
如果上面的文件名为"iis-scriptmaps.wsf",请使用cscript.exe以这种方式运行:
cscript.exe iis-scriptmaps.wsf
Run Code Online (Sandbox Code Playgroud)
小智 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>
Run Code Online (Sandbox Code Playgroud)
在Constants.vbs收集所有的常量,你以后要使用,并在其他VBS文件定义的功能.在主程序文件中MainProgram.vbs,创建一个sub调用MainProgram()程序并在那里编写程序.在此子例程中,您可以使用其他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
Run Code Online (Sandbox Code Playgroud)
希望你能得到这个想法,我可以帮助一些人写出更好的VBS应用:)
在接受的答案的基础上,这是一个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
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在路径中另外使用.和..部分将文件包含在父文件夹等中,并且从哪里启动脚本无关紧要.例:
include "..\Lib\StringUtilities.vbs"
Run Code Online (Sandbox Code Playgroud)