Passage de variable de MS-DOS vers VBS
Monday, 11. February 2008, 19:48:22
J’ai eu il y a quelques temps une question sur laquelle j’ai cherché pendant pas mal de temps une solution :
Passer des paramètres de fichier BATCH en fichier BATCH ou de fichier BATCH vers un fichier BATCH… Mais que le dernier qui était lancé renvoyait la valeur des variables mandées vers le premier.
Partageons donc la solution :
Le BATCH
@ECHO OFF CLS ECHO --------------------------------- ECHO Variables ECHO --------------------------------- ECHO Fichier : %~s0 ECHO Utilisateur : %1 ECHO (Vide au lancement du BATCH) ECHO Password : %2 ECHO (Vide au lancement du BATCH) PAUSE WSCRIPT.EXE MSG.VBS %~s0 EXIT
Et le VBS :
' Passage de Variable BATCH VBS BATCH
' v0.3.19 (c) Groumphy
' Pose des variables
Dim Variable, UserName, Password, Executable
' Récupération du premier argument passé dans le VBS
' par le BATCH. Ligne de commande :
' WSCRIPT.EXE MSG.VBS Argument
Variable = wscript.arguments(0)
'Exposition de la variable récupérée
WScript.Echo "La variable est : " & Variable
' Demande du nom d'utilisateur par InputBox
UserName = InputBox("Quel est le nom d'utilisateur ?")
' Si le nom d'utilisateur est vide
If IsNull(UserName) Then
' Message d'information d'erreur
MsgBox "Erreur - Nom d'utilisateur incorrect."
' Sinon lancement de la suite de la procédure
Else
' Demande du mot de passe par InputBox
Password = InputBox("Quel est le mot de passe associé au nom d'utilisateur " & UserName)
' Si le mot de passe est vide
If IsNull(Password) Then
' Message d'information d'erreur
MsgBox "Erreur - Mot de passe incorrect."
' Sinon poursuite de la procédure
Else
' Affichage de la variable, du nom d'utilisateur et du mot de passe
WScript.Echo Variable & " " & UserName & " " & Password
' Définition de la variable en tant qu'objet du Shell
Set Executable = CreateObject("WScript.Shell")
' Lancement de l'objet Shell contenant la variable, le nom
' d'utilisateur et le mot de passe
Executable.Run Variable & " " & UserName & " " & Password
End If
End If
Comme d’habitude j’ai commenté la source … Rien de bien extraordinaire, mais j’ai été surpris de ne pas encore voir la solution dans beaucoup de forum.
Maintenant cela peut être utile.
Bien entendu le BATCH peut avoir une forme différente. Nous pourrions utiliser une petite ligne supplémentaire telle que :
SET TEST=%1 IF NOT DEFINED TEST1 GOTO END
Et juste avant la sortie du script :
:END EXIT
Cela fermera le script si la variable renvoyée est vide…
Plutôt simple non ?


Anonymous # 22. February 2008, 08:50
Source bien commentée mais
- Faire un "Dim Variable", je trouve ça très limite car Variable est une variable, comme tout ce qui vient après Dim d'ailleurs. Donc imprécis comme nom.
- Faire un "Dim UserName", OK. Mais il ne faut pas que UserName soit un mot clé... Trop limite...
- Toujours, oh oui toujours, préciser le type d'une variable. Même en VB !
Dim nomUtilisateur As String
n'est pas la même chose que
Dim nomUtilisateur.
Sinon, quand on utilise des fonctions, tout est passé en type Variant et les vérifications (l'Option Explicit) ne sert plus à grand chose car on peut passer un entier ou une chaîne.
Après, InputBox ne renvoie pas une chaîne à Null mais à vide.
L'informatique, un métier de rigueur !
Groumphy # 27. February 2008, 20:18
Ici tu peux te servir de tes variables comme tu le désires... Personnellement tu peux les définir si tu le désires. Personnellement je n'ai pas exposé le script complet. Simplement le procédé de passer l'environnement à un autre.
Mais si tu préfères définir ce que tu veux passer, libre à toi
Cependant, je précise que je n'ai jamais dit que mes scripts sont sans fautes, loin de là ; ici je me détend, pour faire passer un peu de jeux.
Anonymous # 8. April 2008, 14:05
Juk,
Aucune utilité à déclarer tes variables avec ...as ... en vbscript, si ce n'est te faire chier.
On est pas en C, ici , un code en Vbscript, ca sert a faire de l'administration pas à être encadré au dessus de son lit pour la beauté du code.
L'informatique, un métier de fainéants.