web-dev-qa-db-ja.com

VBScriptに共通ファイルを含めるにはどうすればよいですか(C #includeと同様)。

VBScriptには、関数の共通ファイルを含める方法がないようです。

これを達成する方法はありますか?

38
paxdiablo

「Windows Script Host」フレームワーク(これを呼び出す場合)は、通常のvbsファイルに機能を追加するXMLラッパードキュメントを提供します。その1つは、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
44
Richard B

次のように、他のファイルを含める各ファイルに(比較的)小さな関数を作成できます。

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"

基本的にファイルを開き、内容全体を文字列に読み取ってから、その文字列を実行します。この種の処理は通常プログラムの起動時に1回行われるため、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
54
paxdiablo

私はこれが古いスレッドであることを知っていますが、とにかく答えを投稿し、他の人が「試行錯誤」によってVBSとWSFファイルについて学んだことを学ぶことができるようにします:

したがって、他の言語と同じ機能を使用するには、1つの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_で、MainProgram()というsubを作成し、そこにプログラムを記述します。このサブルーチンでは、他の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アプリを書くのを手伝うことができます:)

16
Etalon

受け入れられた答えに基づいて、作業ディレクトリの代わりにスクリプトの場所に相対的なパスを取る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"
5
BuvinJ

このVBScriptはローカルで使用されていますか、クラシックASPスタイル?

その古典的なASPの場合、SSIを使用してそれを行うことができます。

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

ExecuteGlobal関数を使用して、グローバル名前空間で任意のVBSコードを実行できます。例はここにあります: http://www.source-code.biz/snippets/vbscript/5.htm

1
Faraz

IIS 5以降では、ASPファイルからの他のファイルを含めるために scriptタグ も使用できます。(VBScriptはASPページまたはWindowsスクリプト?)次に例を示します。

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

動作とルールは、サーバー側インクルードとは少し異なります。注:古典的なASPからこの構文を実際に使用したことはありません。

0
Mike Henry

cscriptでWSFスクリプトタグを間違いなく使用できます。

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

ADODBアクセスにADOVBS.incを使用する場合は、必ず削除してください

<% %>

aDOVBS.INCからのタグ。

0
LKlein