Explication à propos de la fonction Run en vbs

Explication à propos de la fonction Run en vbs - VB/VBA/VBS - Programmation

Marsh Posté le 19-05-2005 à 16:59:04    

Bonjour
 
J'ai une question qui devrait être simple pour les personnes qui codent en VBS aisément, j'espère qu'ils pourront m'expliquer ceci:

Code :
  1. Set objWS = WScript.CreateObject("WScript.Shell" )
  2. objWS.Run """C:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe"


 
Pouquoi faut-il mettre """ devant le chemin d'accès de fichier à lancer lorsque le chemin en question comporte un ou des espaces ?
J'ai galère avant de comprendre çà, parceque je faisait objWS.Run "C:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe" et çà marchait pas alors que quand je testais objWS.Run "C:\AcroRd32.exe" çà marchait bien
 
J'aimerais donc avoir l'explication de quelqu'un qui sait coder en VBS, moi je débute et comme je suis en stage, j'aimerais bien comprendre tout ce que je code. Ya forcément une explication logique et nécéssaire donc je voudrais la connaitre pour éviter de me faire piéger là dessus lors de ma soutenance oral de stage :)
J'ai rien vu dans http://msdn.microsoft.com/library/ [...] MthRun.asp à propos de ce détail.
 
Merci


Message édité par kioo le 19-05-2005 à 17:03:25
Reply

Marsh Posté le 19-05-2005 à 16:59:04   

Reply

Marsh Posté le 19-05-2005 à 19:30:43    

En fait quand tu fait Run "qqch" le qqch en question est l'option que va faire le run.
 
En clair,
Si tu lui dis Run "C:\WINDOWS\Explorer.exe",
il va lancer C:\WINDOWS\Explorer.exe
Si tu lui dis Run "C:\Program Files\Dossier\Prog.exe",
il va chercher à lancer C:\Program et lui indiquer le(s) arguments, en l'occurance Files\Dossier\Prog.exe
Si tu lui dis Run """C:\Program Files\Dossier\Prog.exe"""
il va lancer C:\Program Files\Dossier\Prog.exe


---------------
now : do nothing
Reply

Marsh Posté le 19-05-2005 à 20:04:40    

Par contre, ce que je ne comprends pas c'est que, apparemment, il ne faille pas répéter les 3 guillemets à la fin.
Ou alors, faute de frappe (ou de copier/coller)???


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 19-05-2005 à 20:32:32    

A mon avis faute.


---------------
now : do nothing
Reply

Marsh Posté le 19-05-2005 à 20:37:04    

Ca vient plus de windows que de VBS : regarde ce qui se passe quand tu crées un raccourci, si le chemin comporte un espace il faut encadrer le tout de guillemets, exactement comme ici.

Reply

Marsh Posté le 19-05-2005 à 20:38:52    

merci knakes pour l'explication
j'avais penser à quelque chose comme çà mais sans être sûr
 
 
AlainTech j'ai tester avec """ ou " à la fin et çà marche dans les 2 cas.  
D'après ce que je comprend du vbs maintenant et de l'explication de knakes :
c'est que les 2 premiers " indique que le 1er champ est vide, le " suivant ouvre la champ du chemin+fichier à lancer et le dernier " ferme çà, donc si on rajoute "" ensuite, bein çà doit rajouter un champ vide donc çà modifie rien.
 
mais c'est que une hypothèse d'un débutant donc je laisse les vrai pro du codage vbs le comfirmer.


Message édité par kioo le 19-05-2005 à 20:45:25
Reply

Marsh Posté le 19-05-2005 à 20:53:21    

nan. en fait run exécute une fonction windows (comme on le dit depuis plus haut mais en sous entendu).
 
Quand tu écris Run "machin", Windows va interpréter lancer machin.
Si il y a un espace dans la phrase, alors tu doit faire comprendre à windows que tu veux lancer toute la ligne
En réalité, si tu veux lancer 'C:\Program Files\qqch' tu dois écrire Run """C:\Program Files\qqch""" pour que WIndows l'interprète comme tel.
 
Si on décompose, il faut écrire ceci :
Run <guillemet><chemin avec espace><guillemets>
pour que windows lance <chemin avec espace>
 
le fait de mettre """ indique que tu fait : <"> et <chaine> ...
tu peux aussi faire cela : Run chr(34) & "Chemin avec espace" & chr(34)
en réalité :  chr(34) = "


Message édité par knakes le 19-05-2005 à 20:54:48

---------------
now : do nothing
Reply

Marsh Posté le 19-05-2005 à 21:21:55    

kioo a écrit :

AlainTech j'ai tester avec """ ou " à la fin et çà marche dans les 2 cas.  
D'après ce que je comprend du vbs maintenant et de l'explication de knakes :
c'est que les 2 premiers " indique que le 1er champ est vide, le " suivant ouvre la champ du chemin+fichier à lancer et le dernier " ferme çà, donc si on rajoute "" ensuite, bein çà doit rajouter un champ vide donc çà modifie rien.


Je ne pense pas que ce soit cette explication.
3 guillemets servent à en forcer 1.
Pour reprendre l'explication de knakes:

Citation :

Si tu lui dis Run "C:\WINDOWS\Explorer.exe",  
il va lancer C:\WINDOWS\Explorer.exe  
 
Si tu lui dis Run """C:\Program Files\Dossier\Prog.exe"""  
il va lancer "C:\Program Files\Dossier\Prog.exe"


Par contre, la logique semble ne pas être respectée pour la fin de la ligne...
 
Curieuse logique à la Microsoft.
 
Edit --> Grilled (juste un peu)


Message édité par AlainTech le 19-05-2005 à 21:23:47

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 19-05-2005 à 21:39:00    

Alain -> fouet ?


Message édité par knakes le 19-05-2005 à 21:39:10

---------------
now : do nothing
Reply

Marsh Posté le 19-05-2005 à 21:46:47    

Tss, tss, tss  :non:  
 
Pas pour un petit retard à l'allumage, quand même...


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 19-05-2005 à 21:46:47   

Reply

Marsh Posté le 19-05-2005 à 21:53:14    

no no. je suis pas comme ca  :D  :D


---------------
now : do nothing
Reply

Marsh Posté le 26-05-2005 à 09:18:01    

rebonjour
 
j'ai un autre petit souci avec "Run"
 
en gros mon code qui foire c'est çà :
 

Code :
  1. - lancement_proeng = """F:\proe 2001""" 
  2. 'Initialisation de la variable à une valeur en fonction de paramètres précédents
  3. - shell.Run "Y:\Flo\proe2.cmd " & lancement_proeng + " " & config 
  4. 'Lancement d'un script cmd avec 2 parmetres dont lancement_proeng (dans ce script .cmd, ya divers trucs (delete, copy, concaténation de fichiers) que je préfère laisser en ligne de commande car translate en vbs çà double le nombre de lignes de code pour faire la même chose, et je suis le seul à savoir faire du vbs un peu alors que en ligne de commande, tout le monde presque pourra éditer si besoin)
  5. - shell.Run lancement_proeng + "\bin\proe.bat" 
  6. 'Démarrage du logiciel en lançant le .bat du logiciel crée lors de son install (c'est pas un .exe comme dans la plupart des logiciels mais bon çà change pas grand chose)


 
Mon problème dans tout çà est le suivant:
 
Il vient de la 1ere ligne: lancement_proeng = """F:\proe 2001"""  si le chemin d'accès possède aucun espace, aucun souci, je faisait: lancement_proeng = "F:\proe2001" et tout marchait mais je dois m'assurer que çà marche quelque soit le chemin d'accès (avec ou sans espace, genre: F:\proe2001, F:\proe 2001, C:\Program Files\proe2001\ ...)
donc pour que le lancement du script cmd (shell.Run "Y:\Flo\proe2.cmd " & lancement_proeng) fonctionne avec les 2 bon paramètres (lancement_proeng puis config dont je ne parle pas, il influe pas sur le problème) j'ai mis entre """ ..... """ le chemin d'accès comme vous me l'avez expliqué précédement ce qui fait que çà prend bien en compte le paramètre lancement_proeng en 1 seul bloc et pas plusieurs à cause des espaces.
 
Mais alors la ligne (7) ne fonctionne pas : shell.Run lancement_proeng + "\bin\proe.bat"
au lieu de lancer le logiciel en démrrant le .bat, il ouvre une fenètre explorer au niveau du repertoire "F:\proe 2001", donc il ne prend pas en compte le \bin\proe.bat  
 
J'ai cherché toute la journée hier une solution à çà mais je bloque, j'en conais pas assez en vbs :(
Merci


Message édité par kioo le 26-05-2005 à 11:39:37
Reply

Marsh Posté le 26-05-2005 à 10:07:00    

Première idée qui me vient:
 
Utilise 2 constantes.
1 avec guillemets et une sans (donc avec une seule paire de guillemets l'entourant)
 
Un peu bourrin, j'en conviens.
Si qq1 a une meilleure idée...


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 26-05-2005 à 11:48:36    

j'ai édité mon message parceque je nai pas été assez clair
même pour moi, j'ai du mal à saisir ce qui va ou pas donc quand je vous l'ai retranscrit, je me suis trompé
 
si les chemins d'acces etaient tous sans jamais d'espaces, une seule paire de "..." suffirait et tout marcherait
Mais il peut y avoir des espaces (Program Files par ex on doit faire ave !) donc je dois utiliser des triples """..."""
 
 
 
J'ai trouvé une solution mais bon çà fait solution du pauvre
 
j'initialise au début au même moment que

Code :
  1. - lancement_proeng = """F:\proe 2001"""   
  2. - run_proeng = """F:\proe 2001\bin\proe.bat"""
  3. ' tout çà est toujours initialisé en fonction de trucs variants avant dans ce même script


 
et à la fin je fait un  

Code :
  1. - shell.run run_proeng
  2. ' à la place de - shell.Run lancement_proeng + "\bin\proe.bat"


 
Mais je préferais pouvoir utiliser la variable lancement_proeng + "\bin\proe.bat" si c'est possible biensur
Si on peut pas bein on peut pas...

Reply

Marsh Posté le 26-05-2005 à 12:16:39    

Je crois avoir trouvé la solution :)
 
Je sais pas pourquoi il suffit que je post un message ici pour que me vienne de nouvelles idée de solution alors que hier Nada :(
 
 
donc voilà ce que je viens de tester:
 

Code :
  1. - lancement_proeng = "F:\proe 2001"
  2. - shell.Run "Y:\Flo\proe2.cmd " + chr(34) & lancement_proeng + chr(34) + " " & config
  3. - shell.Run chr(34) + lancement_proeng + "\bin\proe.bat" + chr(34)


Et pour l'instant (je test toujours) çà me lance bien le proe2.cmd sans erreurs dans son exécution puis çà lance aussi le proe.bat


Message édité par kioo le 26-05-2005 à 12:17:11
Reply

Marsh Posté le 26-05-2005 à 15:59:19    

Bonne logique...
On peut difficilement supprimer des guillemets mais on peut facilement en ajouter.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 26-05-2005 à 17:29:53    

solution alternative : il est probablement possible d'utiliser le nom de fichier court comme cela :
intreturn = WSHShell.Run("F:\proe20~1\bin\proe.bat",1,TRUE)
 
ça fonctionne au prompt, ça devrait fonctionner en vbs je pense.


Message édité par axee le 26-05-2005 à 17:31:57
Reply

Marsh Posté le 26-05-2005 à 18:02:24    

oui. après ça retourne même un code : 0 tout va bien, sinon c'est une erreur d'exécution.


---------------
now : do nothing
Reply

Marsh Posté le 05-09-2007 à 00:35:03    

Bonsoir,
Je me permet de vous contacter car je viens de voir sur le forum que vous essayez de lancer ProE par une ligne de commande ce que j'ai fait par le biais d'un petit prog en vb6.
Ma question porte sur le fait de savoir si l'on peut par le biais d'une ligne de commande lancer ProE et le diriger vers un repertoire de travail (je veux lancer ProE et arriver directement sur mon repertoire de travail)?
Si vous avez une experience sur ce sujet j'en serais vivement interesse
Merci d'avance
RogBer

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed