Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2664 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Explication à propos de la fonction Run en vbs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Explication à propos de la fonction Run en vbs

n°1089613
kioo
Posté le 19-05-2005 à 16:59:04  profilanswer
 

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
mood
Publicité
Posté le 19-05-2005 à 16:59:04  profilanswer
 

n°1089857
knakes
Posté le 19-05-2005 à 19:30:43  profilanswer
 

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
n°1089902
AlainTech
Pas trouvé? Cherche encore!
Posté le 19-05-2005 à 20:04:40  profilanswer
 

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!
n°1089928
knakes
Posté le 19-05-2005 à 20:32:32  profilanswer
 

A mon avis faute.


---------------
now : do nothing
n°1089935
TotalRecal​l
Posté le 19-05-2005 à 20:37:04  profilanswer
 

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.

n°1089939
kioo
Posté le 19-05-2005 à 20:38:52  profilanswer
 

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
n°1089960
knakes
Posté le 19-05-2005 à 20:53:21  profilanswer
 

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
n°1090005
AlainTech
Pas trouvé? Cherche encore!
Posté le 19-05-2005 à 21:21:55  profilanswer
 

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!
n°1090023
knakes
Posté le 19-05-2005 à 21:39:00  profilanswer
 

Alain -> fouet ?


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

---------------
now : do nothing
n°1090034
AlainTech
Pas trouvé? Cherche encore!
Posté le 19-05-2005 à 21:46:47  profilanswer
 

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!
mood
Publicité
Posté le 19-05-2005 à 21:46:47  profilanswer
 

n°1090048
knakes
Posté le 19-05-2005 à 21:53:14  profilanswer
 

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


---------------
now : do nothing
n°1097566
kioo
Posté le 26-05-2005 à 09:18:01  profilanswer
 

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
n°1097631
AlainTech
Pas trouvé? Cherche encore!
Posté le 26-05-2005 à 10:07:00  profilanswer
 

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!
n°1097815
kioo
Posté le 26-05-2005 à 11:48:36  profilanswer
 

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...

n°1097848
kioo
Posté le 26-05-2005 à 12:16:39  profilanswer
 

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
n°1098278
AlainTech
Pas trouvé? Cherche encore!
Posté le 26-05-2005 à 15:59:19  profilanswer
 

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!
n°1098425
axee
Space Cowboy
Posté le 26-05-2005 à 17:29:53  profilanswer
 

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
n°1098487
knakes
Posté le 26-05-2005 à 18:02:24  profilanswer
 

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


---------------
now : do nothing
n°1608324
rogber
Posté le 05-09-2007 à 00:35:03  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Explication à propos de la fonction Run en vbs

 

Sujets relatifs
Fonction mail()Fonction POS impossible (facile a resoudre je pense)
Récuperer les paramètres d'une fonction VBAComment marche la fonction Random
Explication d'un bout de code Javascriptproblème avec la fonction onload()
[Caml] Aide pour une fonctionQuestion a propos de "switch"
Probleme avec la fonction onunloadA propos des pointeurs.[Débutant]
Plus de sujets relatifs à : Explication à propos de la fonction Run en vbs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR