Lancer un commande dos dans un script vbs / récupérer le contenu de wscript [Résolu]

Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
- - Dernière réponse : Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
- 28 avril 2009 à 11:17
bonjour à tous,
je voudrai savoir comment on lance une ligne de commande bach dans un programme vbs.

j'ai essayer de la manière suivante :

Set objShell = WScript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("cmd /c chdir")
 Wscript.echo(objExecObject.StdOut.Read(30))

cela marche mais je n'arrive pas à récupérer et stocker dans une chaine  le contenu de  objExecObject
la troisième ligne me confirme que l'objet objExecObject contient bien l'information recherchée

en vous remerciant d'avance
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
3
Merci
Dim sChaineRecuperee
sChaineRecuperee = objExecObject.StdOut.Read(30)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
0
Merci
effectivement cela marche, je l'avait pourtant tester et il m'affichai une erreur
j'ai encore du faire une petite erreur de syntaxe

encore merci à toi
Commenter la réponse de dareman
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
0
Merci
lorsque je fait  sChaineRecuperee = objExecObject.StdOut.Read(30), j'obtient la chaine suivante E:\stage\LDAP soit ce que je veut sauf que lorsque je veut lui concaténer un caractére j'ai alors un probléme
je m'explique si je fait sChaineRecuperee = objExecObject.StdOut.Read(13) & ""  g bien E:\stage\LDAP\
en revanche avec objExecObject.StdOut.Read(30) j'obtient  :
E:\stage\LDAP
\

donc aprés je ne trouve pas le fichier a ouvrir vu que le path n'est pas valide
j'ai essayer de supprimer les espaces sChaineRecuperee = objExecObject.StdOut.Read(30)
sChaineRecuperee = RTrim(sChaineRecuperee)
 sChaineRecuperee = sChaineRecuperee & ""
mais cela ne marche pas, sachant que la taille du path n'est pas fixe comment puis je tester la taille de la chaine à récupée dans objExecObject ?
merci d'avance
Commenter la réponse de dareman
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
1. pourquoi 30 ?
une taille peut aller jusqu'a 260 caractères.

je pense que d'autres caractères existent après le chemin. Et pas des espaces.
je pense à un vbNullChar (caractère de code ascii 0)
Commenter la réponse de Renfield
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
0
Merci
30 c'était uniquement pour effectué un test, effectivement je n'avais pas pensé que cela peut être un caractère ascii et non des espace je vai tester ça merci une fois de plus, de m'avoir éclairé de tes lumières
Commenter la réponse de dareman
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
23
0
Merci
 Bonjour,

sChaineRecuperee = Replace(objExecObject.StdOut.Read(260), vbCrLf, vbNullString) & ""

MsgBox sChaineRecuperee,,Len(sChaineRecuperee)

jean-marc
Commenter la réponse de cs_JMO
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
0
Merci
salut jean-marc,
merci pour ton ça marche maintenant grâce à toi, je testé caractère par caractère avec mid, en effectuant un test pour voir si différent de  vbCrLf
mais sa ne marchai pas très bien, du coup merci à toi.
ps: si vous connaissez un site ou l'on trouve de la doc vbs je suis preneur, parce que jusqu'à'à présent je n'arrive pas trop à trouver et du coup galère pas mal à recréer des fonction qui existent déjà dans le language.
Commenter la réponse de dareman
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
ton Mid ressemblait a quoi (VbCrLf equivaut à deux caractères, hein ^^)
Commenter la réponse de Renfield
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
0
Merci
salu renfield,
mon Mid était tout ce qu'il ya de plus classique il ressemblai à peu prêt à sa:

i=1
chaine=""
while (mid (sChaineRecuperee,i,1) <> "")
  if (mid (sChaineRecuperee,i,1) <> vbCrLf) then
                  chaine = chaine & mid (sChaineRecuperee,i,1)
                    i=i+1
end if
wend

voila le probléme c'est qu'il rentrés toujours dans le if, mais avec le code de jmo sa marche maintenant

bonne journée à toi
Commenter la réponse de dareman
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
c'est bien ce que je pensais...

mid (sChaineRecuperee,i,1) <> vbCrLf

sera TOUJOURS vrai, quelle que soit ta chaine en entrée...
en effet, tu compare une chaine d'un cararactère avec VbCrLf, qui equivaut à deux caractères...
Commenter la réponse de Renfield