91 votes

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 je lance le script que j'ai envie de passer à la valeur de la "workFolder" à la variable.

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

Question Bonus: Est-il nécessaire de nettoyer le passé de la variable "Set workFolder = Rien", ou ne VBSCript faire automatiquement quand elle se termine? Peut-être que "Set Fichier = Rien" et "Set FSO = Nothing" est inutile aussi? S'il vous plaît laissez-moi savoir si vous savez la réponse à ces deux questions.

149voto

0xA3 Points 73439

Vous pouvez utiliser WScript.Arguments d'accès les arguments passés au script.

L'appel du script:

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

À l'intérieur de votre script:

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

N'oubliez pas de vérifier si il n'y a en fait été un argument transmis à votre script. Vous pouvez le faire en cochant la Count de la propriété:

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

Si votre script est plus de fois que vous fermez le fichier, puis il n'est pas nécessaire de définir les variables d' Nothing. Les ressources seront nettoyés automatiquement lorsque le cscript.exe un processus se termine. Définition d'une variable d' Nothing habituellement n'est nécessaire que si vous souhaitez explicitement à libérer des ressources au cours de l'exécution de votre script. Dans ce cas, vous devez définir les variables qui contiennent une référence à un objet COM Nothing, ce qui permettrait de libérer l'objet COM avant votre script se termine. C'est juste une réponse courte à votre question bonus, vous trouverez plus d'informations 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 pour "Rien" en VB6?

27voto

Oleg Points 136406

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
 

6voto

unrealtrip Points 510

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 si quelqu'un n'entre pas la valeur appropriée, etc.

Exemples MS Technet

1voto

Eric Ng Points 11

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X