Как включить общий файл в VBScript (аналогично С#include)?
У VBScript не существует способа включить общий файл функций.
Есть ли способ достичь этого?
Ответы
Ответ 1
Рамка "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
Ответ 2
Вы можете создать (относительно) небольшую функцию в каждом файле, в который вы хотите включить другие файлы, следующим образом:
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
Ответ 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
создайте 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:)
Ответ 4
Используется ли этот VBScript локально или классический стиль ASP?
Если его классический ASP, вы можете использовать SSI для него:
<!-- #include virtual="/PathTo/MyFile.vbs" -->
Ответ 5
Вы можете использовать функцию ExecuteGlobal для запуска произвольного кода VBS в глобальном пространстве имен. Пример можно найти здесь: http://www.source-code.biz/snippets/vbscript/5.htm
Ответ 6
Основываясь на принятом ответе, здесь включается подпрограмма, которая берет путь относительно местоположения 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"
Ответ 7
IIS 5 и выше также позволяют script
для включения других файлов из файла ASP. (Является ли ваш VBScript страницей ASP или Windows script?) Вот пример:
<script language="VBScript" runat="server" src="include.asp"></script>
Поведение и правила немного отличаются от серверных. Примечание. Я никогда не пытался использовать этот синтаксис из классического ASP.
Ответ 8
вы можете определенно использовать тег WSF script в cscript:
<script language="VBScript" src="ADOVBS.INC"/>
Если вы используете ADOVBS.inc для доступа к ADODB, обязательно удалите
<% %>
из ADOVBS.INC.