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.
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
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
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.
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.
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