VBScript ne semble pas avoir un moyen d'inclure un fichier commun de fonctions.
Existe-t-il un moyen d'y parvenir?
Le framework "Windows Script Host" (si vous voulez l'appeler ainsi), propose un document wrapper XML qui ajoute des fonctionnalités sur les fichiers vbs standard. L'un d'eux est la possibilité d'inclure des fichiers de script externes à la fois les versions VBscript et Jscript. Je n'y suis jamais allé très profondément, mais je pense que cela ferait ce que vous voulez faire. http://msdn.Microsoft.com/en-us/library/15x4407c (VS.85) .aspx
Vous pouvez inclure JavaScript, VBScript ou des modules d'autres langages de script WScript.
Exemple de fichier WSF:
<job id="IncludeExample">
<script language="JavaScript" src="sprintf.js"/>
<script language="VBScript" src="logging.vbs"/>
<script language="VBScript" src="iis-queryScriptMaps.vbs"/>
</job>
Si le fichier ci-dessus est appelé "iis-scriptmaps.wsf", exécutez-le de cette façon avec cscript.exe:
cscript.exe iis-scriptmaps.wsf
Vous pouvez créer une fonction (relativement) petite dans chaque fichier dans lequel vous souhaitez inclure d'autres fichiers, comme suit:
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
puis l'utiliser pour inclure des fichiers spécifiques - ceux-ci sont exécutés comme s'ils étaient en ligne.
includeFile "commonapi.vbi"
includeFile "dbcalls.vbi"
Il ouvre essentiellement le fichier, lit l'intégralité du contenu dans une chaîne, puis exécute cette chaîne. Il n'y a pas de gestion d'erreur sur les appels d'E/S car ce genre de choses est généralement effectué une fois au démarrage du programme, et vous voulez échouer s'il y a un problème à l'inclure.
Notez que la fonction includeFile
peut être compressée pour:
Sub includeFile(fSpec)
With CreateObject("Scripting.FileSystemObject")
executeGlobal .openTextFile(fSpec).readAll()
End With
End Sub
Ou même pour (si vous n'êtes pas opposé aux longues lignes):
Sub includeFile(fSpec)
executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
End Sub
Je sais que c'est un vieux fil de discussion mais je poste quand même ma réponse pour que les autres puissent apprendre ce que j'ai appris sur les fichiers VBS et WSF par "essai et erreur":
Donc, pour avoir les mêmes fonctionnalités que dans d'autres langues, vous pouvez créer un fichier WSF et y inclure toutes vos bibliothèques VBS, y compris le programme principal.
Quelque chose comme ça :
<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>
Dans Constants.vbs
Collectez toutes les constantes que vous souhaitez utiliser ultérieurement et dans les autres fichiers VBS définissez vos fonctions. Dans votre fichier programme principal MainProgram.vbs
, Créez un sub
appelé MainProgram()
et écrivez votre programme là-bas. Dans ce sous-programme, vous pouvez utiliser toutes les constantes et fonctions définies dans les autres fichiers VBS.
Par exemple :
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
J'espère que vous avez l'idée et je pourrais aider certaines personnes à écrire de meilleures applications VBS :)
En s'appuyant sur la réponse acceptée, voici une sous-procédure d'inclusion qui prend un chemin relatif à l'emplacement du script au lieu du répertoire de travail:
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
Notez que vous pouvez également utiliser .
et ..
des parties de votre chemin pour inclure des fichiers dans les dossiers parents, etc. et peu importe d'où vous lancez le script. Exemple:
include "..\Lib\StringUtilities.vbs"
Ce VBScript est-il utilisé localement ou servi-il de manière classique ASP style?
Si c'est un ASP classique, vous pouvez utiliser SSI pour le faire:
<!-- #include virtual="/PathTo/MyFile.vbs" -->
Vous pouvez utiliser la fonction ExecuteGlobal pour exécuter du code VBS arbitraire dans l'espace de noms global. Un exemple peut être trouvé ici: http://www.source-code.biz/snippets/vbscript/5.htm
IIS 5 et versions ultérieures autorisent également une balise script
pour inclure d'autres fichiers à partir d'un fichier ASP. (Votre VBScript est-il un ASP page ou un script Windows?) Voici un exemple:
<script language="VBScript" runat="server" src="include.asp"></script>
Le comportement et les règles sont un peu différents des inclusions côté serveur. Remarque: je n'ai jamais essayé d'utiliser cette syntaxe d'ASP classique.
vous pouvez certainement utiliser la balise de script WSF en cscript:
<script language="VBScript" src="ADOVBS.INC"/>
Si vous utilisez ADOVBS.inc pour un accès ADODB, assurez-vous de supprimer le
<% %>
tags de ADOVBS.INC.