web-dev-qa-db-fra.com

Puis-je passer un argument à un VBScript (fichier vbs lancé avec cscript)?

J'ai ce script enregistré dans "test.vbs":

Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile(workFolder &"\test.txt", 2, True)
File.Write "testing"
File.Close
Set File = Nothing
Set FSO = Nothing
Set workFolder = Nothing

Lorsque je lance le script, je souhaite transmettre la valeur de la variable "workFolder".

Comment puis-je faire ceci? Puis-je le faire? Quelque chose comme "cscript test.vbs workFolder: 'C:\temp \'" peut-être?

Question bonus: Est-il nécessaire de nettoyer la variable passée avec "Set workFolder = Nothing" ou VBSCript le fait-il automatiquement quand il se termine? Peut-être que "Set File = Nothing" et "Set FSO = Nothing" sont également inutiles? S'il vous plaît laissez-moi savoir si vous connaissez la réponse à ces deux questions.

76
Peter

Vous pouvez utiliser WScript.Arguments pour accéder aux arguments passés à votre script.

Appel du script:

cscript.exe test.vbs "C:\temp\"

Dans votre script:

Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)

N'oubliez pas de vérifier si un argument a bien été passé à votre script. Vous pouvez le faire en vérifiant la propriété Count:

if WScript.Arguments.Count = 0 then
    WScript.Echo "Missing parameters"
end if

Si votre script est terminé après la fermeture du fichier, il n'est pas nécessaire de définir les variables sur Nothing. Les ressources seront nettoyées automatiquement à la fin du processus cscript.exe. La définition d'une variable sur Nothing n'est généralement nécessaire que si vous souhaitez explicitement libérer des ressources lors de l'exécution de votre script. Dans ce cas, vous définiriez les variables contenant une référence à un objet COM sur Nothing, ce qui libérerait l'objet COM avant la fin du script. Ceci est juste une réponse courte à votre question sur les bonus, vous trouverez plus d'informations dans les questions suivantes:

Est-il nécessaire de définir les objets sur Nothing dans les fonctions VBA

Quand dois-je définir une variable sur "Rien" dans VB6?

128
Dirk Vollmar

Dans VBS, vous pouvez accéder aux paramètres avec

Wscript.Arguments(0)
Wscript.Arguments(1)

etc. Le nombre de paramètre:

Wscript.Arguments.Count
18
Oleg

Chaque argument passé via la ligne de commande est accessible avec: Wscript.Arguments.Item (0) Où le zéro est le numéro de l’argument: 0, 1, 2, 3, etc.

Donc, dans votre code, vous pourriez avoir:

strFolder = Wscript.Arguments.Item(0) 

Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile(strFolder, 2, True)
File.Write "testing"
File.Close
Set File = Nothing
Set FSO = Nothing
Set workFolder = Nothing

En utilisant wscript.arguments.count, vous pouvez générer une erreur au cas où quelqu'un n'entre pas la valeur appropriée, etc.

exemples MS Technet

5
unrealtrip

En fait, la réponse à la question sur le bonus est "Non". Tu n'as pas besoin de nettoyer. Mais la pratique générale de la programmation consiste à toujours nettoyer vos affaires, comme après votre dîner, veuillez nettoyer votre assiette.

2
Eric Ng

En enseignant aux nouveaux programmeurs, la bonne réponse à "dois-je nettoyer?" est toujours oui. Si on a l'habitude de nettoyer, on va nettoyer. Ensuite, lorsque cela est réellement nécessaire (de peur que l’on ne gâche le tas, etc.), le nettoyage est une habitude et se produira.

La meilleure question est "Cela pose-t-il un problème si je nettoie à la fin de ce script?" ou même mieux ... "En supposant que je continue avec un long script (ou que je n'ai pas de GC disponible), est-ce la bonne façon de nettoyer ces objets?"

mes deux centimes. Paul

2
Paul