Retouner des valeurs de variable d'un .bat a un code vb

Signaler
Messages postés
5
Date d'inscription
mardi 31 octobre 2000
Statut
Membre
Dernière intervention
12 septembre 2002
-
Messages postés
38
Date d'inscription
mardi 4 avril 2006
Statut
Membre
Dernière intervention
19 septembre 2006
-
bonjour,

Comment peut-on faire pour a partir d'un code vb appeler un .bat et faire en sorte de retourner une valeur de variable du .bat au code vb?

merci

6 réponses

Messages postés
124
Date d'inscription
mardi 19 février 2002
Statut
Membre
Dernière intervention
7 mars 2004
1
La solution la plus simple est de mettre le résultat de ton script dans une variable :
set laVariable=leResultat

Et en vb :
resultat = environ("laVariable")
0
Messages postés
5
Date d'inscription
mardi 31 octobre 2000
Statut
Membre
Dernière intervention
12 septembre 2002

ca ne marche pas, voici mon programme test.bat en .bat:
@echo off

call test2.exe (lance un exe existant)
set variable=0

voici un bout du prog en vb:
Dim result As String

Call Shell("D:\ASYSInstalls\test.bat", vbNormalFocus)
result = Environ("variable")
If (result = "0") Then
Check1.Value = vbChecked
end if

et la valeur de result="", rien n'arrive!
je ne vois pas comment en mettant la commande "environ" le progr comprend qu'il faut alle chercher la variable ds le shell qui s'est executer.
Il faut que je declare variable?en quoi?
J'ai besoin de tes lumieres!!
Merci
0
Messages postés
59
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
29 janvier 2004

'C'est peut être un peu lourd mais vu mes capacités je ferais comme suit :
'Dans le .bat, ecrire le résultat de la variable dans un fichier txt
echo variable > c:\variable.txt
'Dans vb, lire le contenu du fichier txt
Dim fileNumber as Long
Dim variable
fileNumber = FreeFile
Open "c:\variable.txt" For Input As #fileNumber
Line Input #fileNumber, variable
Close #fileNumber
0
Messages postés
5
Date d'inscription
mardi 31 octobre 2000
Statut
Membre
Dernière intervention
12 septembre 2002

Merci, ca marche super bien!
0
Messages postés
59
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
29 janvier 2004

Attention ! le problème est que vb lit dans le fichier text alors que le programme DOS n'est peut être pas encore terminé!
Tu peux attendre la fin du programme DOS via des API (http://www.vbfrance.com/forum.aspx?Article=41715) ou bien encore un truc lourding mais efficace :

'Dans VB
'Supprimer le fichier texte qui contient la variable
Kill "c:\variable.txt"

'Lancer le .bat
Call Shell("D:\ASYSInstalls\test.bat", vbNormalFocus)

'Lire le fichier texte seulement s'il a été créé par le .bat
Dim fileNumber as Long
Dim variable as String
Dim DebutExecution as Long
Dim GardeFou as Long 'Nombre de scondes au bout desquelles tu estimes que le programme DOS s'est planté et n'a pas pu créer le fichier texte

GardeFou = 120
DebutExecution = Timer

Do Until Timer - DebutExecution > GardeFou
DoEvents
If Dir("c:\variable.txt")<>"" Then
fileNumber = FreeFile
Open "c:\variable.txt" For Input As #fileNumber
Line Input #fileNumber, variable
Close #fileNumber
'On peut sortir de la boucle
Exit Do
End If
Loop
0
Messages postés
38
Date d'inscription
mardi 4 avril 2006
Statut
Membre
Dernière intervention
19 septembre 2006

s'est un peut lourd s'est vrais mais sa marche tres bien j'ai une disaine de variable gerer comme ca car j'ai pas trover d'autre moyen mais une petite astuce je les mais dans un ram disck au demarage et les suvgarde sur le disck dur a larret , ce qui permet d'avoir une reponce plus rapide lors que je les interoge puisqu 'elles son en ram l'inconvegnant s'est le temps de demarage et d'arret mais c'est pas mon souci pour moi tous du moin
0