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

Résolu
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011 - 24 avril 2009 à 13:55
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 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

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 avril 2009 à 14:01
Dim sChaineRecuperee
sChaineRecuperee = objExecObject.StdOut.Read(30)
3
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
24 avril 2009 à 14:06
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
0
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
24 avril 2009 à 15:22
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 avril 2009 à 15:26
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
24 avril 2009 à 15:30
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
26 avril 2009 à 08:10
 Bonjour,

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

MsgBox sChaineRecuperee,,Len(sChaineRecuperee)

jean-marc
0
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
27 avril 2009 à 09:13
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 avril 2009 à 09:17
ton Mid ressemblait a quoi (VbCrLf equivaut à deux caractères, hein ^^)
0
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
28 avril 2009 à 11:00
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 avril 2009 à 11:17
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...
0
Rejoignez-nous