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

Signaler
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Dim sChaineRecuperee
sChaineRecuperee = objExecObject.StdOut.Read(30)
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011

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
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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)
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011

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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonjour,

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

MsgBox sChaineRecuperee,,Len(sChaineRecuperee)

jean-marc
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011

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.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
ton Mid ressemblait a quoi (VbCrLf equivaut à deux caractères, hein ^^)
Messages postés
39
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
10 janvier 2011

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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...