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

j'ai ce script enregistré dans "essai.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

quand j'exécute le script, je veux passer la valeur de la variable" workFolder".

Comment faire? Puis-je le faire? Quelque chose comme "test cscript".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 " Set File = Rien " et "Set FSO = Nothing" n'est pas nécessaire non plus? Veuillez me faire savoir si vous connaissez la réponse à ces deux questions.

70
demandé sur Peter 2010-05-11 01:52:16

5 réponses

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

l'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 s'il y a effectivement eu un argument passé à votre script. Vous pouvez le faire en cochant 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 variables à Nothing . Les ressources seront nettoyées automatiquement lorsque cscript.fin du processus exe. Définir une variable à Nothing n'est généralement nécessaire que si vous voulez explicitement libérer des ressources pendant l'exécution de votre script. Dans ce cas , vous définiriez les variables qui contiennent une référence à un objet COM à Nothing , ce qui libérerait l'objet COM avant la fin de votre script. C'est juste une réponse courte à votre question bonus, vous trouverez plus d' information dans ces questions connexes:

Est-il nécessaire de définir des Objets à Rien à l'intérieur de Fonctions VBA

Quand dois-je définir une variable à "rien" dans VB6?

116
répondu Dirk Vollmar 2017-05-23 11:33:24

à l'intérieur DE VBS vous pouvez accéder aux paramètres avec

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

et ainsi de suite. Le nombre de paramètre:

Wscript.Arguments.Count
17
répondu Oleg 2010-05-10 21:58:08

chaque argument passé par la ligne de commande peut être accédé avec: Wscript.Argument.Item (0) où le Zéro est le numéro d'argument: ie, 0, 1, 2, 3 etc.

donc dans votre code vous auriez pu:

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.argument.count, vous pouvez le piège d'erreur dans le cas où quelqu'un n'entre pas la bonne valeur, etc.

MS Technet examples

5
répondu unrealtrip 2010-05-10 21:56:31

en fait, la réponse à la question bonus est "non". Vous n'avez pas besoin de nettoyer. Mais la pratique générale de la programmation est de toujours nettoyer vos affaires, comme après votre dîner, pls nettoyer votre assiette.

2
répondu Eric Ng 2014-03-15 19:09:55

dans l'enseignement des nouveaux programmeurs, la bonne réponse à "Dois-je nettoyer?"est toujours oui. Si on a l'habitude de nettoyer, on nettoiera. Puis quand cela est réellement nécessaire (de peur que l'on ne fasse un désordre du tas, etc.), le nettoyage est l'habitude et qui va se passer.

La meilleure question est "est-il poser un problème si je fais le ménage à la fin de ce script?"ou encore mieux... "En supposant que je continue avec un script longish (ou que je n'ai pas GC disponible), est-ce la bonne façon de nettoyer ces objets?"

mes deux cents. Paul

2
répondu Paul 2015-03-30 03:35:01