Как включить общий файл в VBScript (аналог C #include)? - PullRequest
38 голосов
/ 25 ноября 2008

В VBScript, по-видимому, нет способа включить общий файл функций.

Есть ли способ достичь этого?

Ответы [ 8 ]

53 голосов
/ 25 ноября 2008

Вы можете создать (относительно) небольшую функцию в каждом файле, в который вы хотите включить другие файлы, следующим образом:

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
43 голосов
/ 25 ноября 2008

Среда «Windows Script Host» (если вы хотите так ее называть) предлагает документ-оболочку 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
16 голосов
/ 11 сентября 2012

Я знаю, что это старая ветка, но я все равно публикую свой ответ, чтобы другие могли узнать, что я узнал о файлах 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.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:)

5 голосов
/ 13 мая 2017

Опираясь на принятый ответ, вот процедура включения sub, которая принимает путь относительно местоположения скрипта вместо рабочего каталога:

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"
1 голос
/ 15 июля 2009

Вы можете использовать функцию ExecuteGlobal для запуска произвольного кода VBS в глобальном пространстве имен. Пример можно найти здесь: http://www.source -code.biz / snippets / vbscript / 5.htm

1 голос
/ 25 ноября 2008

Этот VBScript используется локально или обслуживается в классическом стиле ASP?

Если это классический ASP, вы можете использовать SSI для этого:

<!-- #include virtual="/PathTo/MyFile.vbs" -->
0 голосов
/ 24 февраля 2010

вы можете определенно использовать тег сценария WSF в cscript:

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

Если вы используете ADOVBS.inc для доступа к ADODB, обязательно удалите

<% %>

тегов от ADOVBS.INC.

0 голосов
/ 26 ноября 2008

IIS 5 и выше также допускают использование тега Tags for Includes">script для включения других файлов из файла ASP. (Является ли ваш VBScript страницей ASP или сценарием Windows?) Вот пример:

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

Поведение и правила немного отличаются от включений на стороне сервера. Примечание: я никогда не пытался использовать этот синтаксис из классического ASP.

...