У VBScript не существует способа включить общий файл функций.
Есть ли способ достичь этого?
У VBScript не существует способа включить общий файл функций.
Есть ли способ достичь этого?
Рамка "Windows Script Host" (если вы хотите ее назвать) предлагает документ обертки XML, который добавляет функциональность по сравнению с обычными файлами vbs. Одна из них - возможность включать внешние файлы Script как для VBscript, так и для Jscript. Я никогда не впадал в нее глубоко, но я думаю, что это сделает то, что вы хотите сделать. http://msdn.microsoft.com/en-us/library/15x4407c(VS.85).aspx
Вы можете включить JavaScript, VBScript или модули других языков WScript Script.
Пример 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
Вы можете создать (относительно) небольшую функцию в каждом файле, в который вы хотите включить другие файлы, следующим образом:
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"
Он в основном открывает файл, считывает все содержимое в строку, затем выполняет эту строку. Там нет обработки ошибок в вызовах ввода-вывода, поскольку этот вид вещей обычно выполняется один раз при запуске программы, и вы хотите сбой, если есть проблема, включая его.
Обратите внимание, что функцию 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
Я знаю, что это старый поток, но я все равно отправляю свой ответ, чтобы другие могли узнать, что я узнал о 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
под названием 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 protected]"
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:)
Используется ли этот VBScript локально или классический стиль ASP?
Если его классический ASP, вы можете использовать SSI для него:
<!-- #include virtual="/PathTo/MyFile.vbs" -->
Вы можете использовать функцию ExecuteGlobal для запуска произвольного кода VBS в глобальном пространстве имен. Пример можно найти здесь: http://www.source-code.biz/snippets/vbscript/5.htm
Основываясь на принятом ответе, здесь включается подпрограмма, которая берет путь относительно местоположения script вместо рабочего каталога:
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
Обратите внимание, что вы можете дополнительно использовать .
и ..
части вашего пути для включения файлов в родительские папки и т.д., и не имеет значения, откуда вы запускаете script. Пример:
include "..\Lib\StringUtilities.vbs"
IIS 5 и выше также позволяют script
для включения других файлов из файла ASP. (Является ли ваш VBScript страницей ASP или Windows script?) Вот пример:
<script language="VBScript" runat="server" src="include.asp"></script>
Поведение и правила немного отличаются от серверных. Примечание. Я никогда не пытался использовать этот синтаксис из классического ASP.
вы можете определенно использовать тег WSF script в cscript:
<script language="VBScript" src="ADOVBS.INC"/>
Если вы используете ADOVBS.inc для доступа к ADODB, обязательно удалите
<% %>
из ADOVBS.INC.