Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Démarrer un fichier de commande depuis VBS

9 réponses
Avatar
Pierre-Yves
Bonjour,

Voila, il s'agit de faire exécuter un fichier de commande depuis un script
VBS et d'attendre que son exécution soit terminée avant de continuer. Pour
cela j'ai utilisé le code suivant sur un serveur Windows 2003 :

strCmd = "%COMSPEC% /c start /D d:\tools\batch /NORMAL /WAIT CleanupUsr.cmd"
WshShell.Run strCmd,0,True

Malheureusement, le fichier de commande ne s'exécute pas via VBS (j'ai
l'impression qu'il ne se passe rien), alors que lorsque je l'exécute en
interactif (en double-cliquant dessus) il s'exécute sans problème.

Quelqu'un aurai-t-il une idée ?

Merci d'avance et meilleures salutations
Pierre-Yves

9 réponses

Avatar
Méta-MCI \(MVP\)
Bonsoir !

Et, avec cette 2ème ligne :
WScript.CreateObject("WScript.Shell").Run strCmd,0,True
c'est pas plus mieux bien ?

@+
--
Michel Claveau
Avatar
Gilles LAURENT [MVP]
"Pierre-Yves" a écrit dans le
message de
news:
| Bonjour,

Bonjour,

| Voila, il s'agit de faire exécuter un fichier de commande depuis un
| script VBS et d'attendre que son exécution soit terminée avant de
| continuer. Pour cela j'ai utilisé le code suivant sur un serveur
| Windows 2003 :
|
| strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT
| CleanupUsr.cmd" WshShell.Run strCmd,0,True

Nul besoin de faire appel à la commande "Start" sachant que la méthode
"Run" de l'objet "WshShell" permet déjà d'attendre la fin de l'exécution
d'une tâche. Ci-dessous la définition de la méthode "Run" :

Run (Command, [WindowStyle], [WaitOnReturn])

Je vous propose donc la solution suivante :

strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 0, True

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Pierre-Yves
Bonsoir Michel,

Merci pour votre réponse rapide.

J'avais bien défini plus haut dans mon code : Set WshShell=
Wscript.CreateObject("Wscript.Shell").

J'ai cependant utilisé les commandes proposées, mais le résultat est
identique avec toutefois une amélioration : plus de message d'erreur de VBS,
mais le fichier de commande ne s'exécute toujours pas et le script continue
simplement à la ligne suivante.

En complément d'information, mon script est démarré par le gestionnaire de
tâche, mais il donne les mêmes résultats si je le démarre manuellement.

Alors, si vous avec une autre idée, je suis preneur.

Meilleure salutations
Pierre-Yves

"Méta-MCI (MVP)" a écrit dans le message
de news: 48caef19$0$897$
Bonsoir !

Et, avec cette 2ème ligne :
WScript.CreateObject("WScript.Shell").Run strCmd,0,True
c'est pas plus mieux bien ?

@+
--
Michel Claveau



Avatar
Pierre-Yves
Bonjour Gilles

Merci pour votre réponse rapide.

J'ai bien essayé votre proposition, mais sans succès (voir aussi ma réponse
à Michel, Méta-MCI)
Alors si vous avec une autre idée, je suis preneur.

Meilleure salutations
Pierre-Yves


"Gilles LAURENT [MVP]" a écrit dans le message de news:

"Pierre-Yves" a écrit dans le
message de
news:
| Bonjour,

Bonjour,

| Voila, il s'agit de faire exécuter un fichier de commande depuis un
| script VBS et d'attendre que son exécution soit terminée avant de
| continuer. Pour cela j'ai utilisé le code suivant sur un serveur
| Windows 2003 :
|
| strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT
| CleanupUsr.cmd" WshShell.Run strCmd,0,True

Nul besoin de faire appel à la commande "Start" sachant que la méthode
"Run" de l'objet "WshShell" permet déjà d'attendre la fin de l'exécution
d'une tâche. Ci-dessous la définition de la méthode "Run" :

Run (Command, [WindowStyle], [WaitOnReturn])

Je vous propose donc la solution suivante :

strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 0, True

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr




Avatar
Gilles LAURENT [MVP]
"Pierre-Yves" wrote:

Bonjour Gilles



Bonjour Pierre-Yves,

Merci pour votre réponse rapide.

J'ai bien essayé votre proposition, mais sans succès (voir aussi ma réponse
à Michel, Méta-MCI)
Alors si vous avec une autre idée, je suis preneur.



Pourriez-vous me transmettre le script batch par voie de messagerie ? Cela
me permettra de réaliser quelques tests "Live" !

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Michel__D
Bonjour,

Pierre-Yves a écrit :
Bonjour,

Voila, il s'agit de faire exécuter un fichier de commande depuis un script
VBS et d'attendre que son exécution soit terminée avant de continuer. Pour
cela j'ai utilisé le code suivant sur un serveur Windows 2003 :

strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT CleanupUsr.cmd"
WshShell.Run strCmd,0,True

Malheureusement, le fichier de commande ne s'exécute pas via VBS (j'ai
l'impression qu'il ne se passe rien), alors que lorsque je l'exécute en
interactif (en double-cliquant dessus) il s'exécute sans problème.

Quelqu'un aurai-t-il une idée ?




Si par "(j'ai l'impression qu'il ne se passe rien)" tu veux dire que
tu ne vois rien il suffit de changer le 0 en une autre valeur qui montre
la fenêtre de commande, par exemple :

strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 3, True

PS:Et pour être sur que l'attente se fait bien, il peut être inséré une
pause dans le fichier batch (CleanupUsr.cmd).
Avatar
Pierre-Yves
Salut Michel

J'ai suivi tes propositions (paramètre 3 + pause dans le batch), mais
toujours sans obtenir les résultats voulus: aucune fenêtre ne s'ouvre, ou
alors c'est très furtif, et aucune trace de la du batch censé être en pause
(à mon avis il n'est pas exécuté).

Je me pose donc la question si cette methode fonctionne vraiement ?

Est-ce que quelqu'un l'a déjà utilisée pratiquement ?

Merci et cordiales salutations
Pierre-Yves

"Michel__D" a écrit dans le message de
news:
Bonjour,

Pierre-Yves a écrit :
Bonjour,

Voila, il s'agit de faire exécuter un fichier de commande depuis un
script VBS et d'attendre que son exécution soit terminée avant de
continuer. Pour cela j'ai utilisé le code suivant sur un serveur Windows
2003 :

strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT
CleanupUsr.cmd"
WshShell.Run strCmd,0,True

Malheureusement, le fichier de commande ne s'exécute pas via VBS (j'ai
l'impression qu'il ne se passe rien), alors que lorsque je l'exécute en
interactif (en double-cliquant dessus) il s'exécute sans problème.

Quelqu'un aurai-t-il une idée ?




Si par "(j'ai l'impression qu'il ne se passe rien)" tu veux dire que
tu ne vois rien il suffit de changer le 0 en une autre valeur qui montre
la fenêtre de commande, par exemple :

strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 3, True

PS:Et pour être sur que l'attente se fait bien, il peut être inséré une
pause dans le fichier batch (CleanupUsr.cmd).


Avatar
Michel__D
Bonjour,

Alors oui la méthode run de l'objet "WScript.Shell" fonctionne, maintenant
ton problème est un problème de débugage donc il y a plusieurs façons de
faire (à toi de trouver la tienne), tu peux par exemple mettre des msgbox
aprés chaque ligne du script que tu auras developpé :

' Créer l'objet "WScript.Shell"
Set oShell = CreateObject("WScript.Shell")
msgbox "Test1 Ok"
' Remplacer la variable %COMSPEC% par sa valeur réelle
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
iRet = oShell.Run strCmd, 3, True
msgbox "Test2 Ok" & vbcrlf & iRet

Ps:Tu peux aussi utiliser un utilitaire qui t'indique les process en cours
de fonctionnement.

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx


Pierre-Yves a écrit :
Salut Michel

J'ai suivi tes propositions (paramètre 3 + pause dans le batch), mais
toujours sans obtenir les résultats voulus: aucune fenêtre ne s'ouvre, ou
alors c'est très furtif, et aucune trace de la du batch censé être en pause
(à mon avis il n'est pas exécuté).

Je me pose donc la question si cette methode fonctionne vraiement ?

Est-ce que quelqu'un l'a déjà utilisée pratiquement ?

Merci et cordiales salutations
Pierre-Yves

"Michel__D" a écrit dans le message de
news:
Bonjour,

Pierre-Yves a écrit :
Bonjour,

Voila, il s'agit de faire exécuter un fichier de commande depuis un
script VBS et d'attendre que son exécution soit terminée avant de
continuer. Pour cela j'ai utilisé le code suivant sur un serveur Windows
2003 :

strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT
CleanupUsr.cmd"
WshShell.Run strCmd,0,True

Malheureusement, le fichier de commande ne s'exécute pas via VBS (j'ai
l'impression qu'il ne se passe rien), alors que lorsque je l'exécute en
interactif (en double-cliquant dessus) il s'exécute sans problème.

Quelqu'un aurai-t-il une idée ?



Si par "(j'ai l'impression qu'il ne se passe rien)" tu veux dire que
tu ne vois rien il suffit de changer le 0 en une autre valeur qui montre
la fenêtre de commande, par exemple :

strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 3, True

PS:Et pour être sur que l'attente se fait bien, il peut être inséré une
pause dans le fichier batch (CleanupUsr.cmd).






Avatar
Michel__D
Il manque des parenthèses :

' Créer l'objet "WScript.Shell"
Set oShell = CreateObject("WScript.Shell")
msgbox "Test1 Ok"
' Remplacer la variable %COMSPEC% par sa valeur réelle
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
iRet = oShell.Run(strCmd,3,True)
msgbox "Test2 Ok" & vbcrlf & iRet


Michel__D a écrit :
Bonjour,

Alors oui la méthode run de l'objet "WScript.Shell" fonctionne, maintenant
ton problème est un problème de débugage donc il y a plusieurs façons de
faire (à toi de trouver la tienne), tu peux par exemple mettre des msgbox
aprés chaque ligne du script que tu auras developpé :

' Créer l'objet "WScript.Shell"
Set oShell = CreateObject("WScript.Shell")
msgbox "Test1 Ok"
' Remplacer la variable %COMSPEC% par sa valeur réelle
strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
iRet = oShell.Run strCmd, 3, True
msgbox "Test2 Ok" & vbcrlf & iRet

Ps:Tu peux aussi utiliser un utilitaire qui t'indique les process en cours
de fonctionnement.

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx


Pierre-Yves a écrit :
Salut Michel

J'ai suivi tes propositions (paramètre 3 + pause dans le batch), mais
toujours sans obtenir les résultats voulus: aucune fenêtre ne s'ouvre,
ou alors c'est très furtif, et aucune trace de la du batch censé être
en pause (à mon avis il n'est pas exécuté).

Je me pose donc la question si cette methode fonctionne vraiement ?

Est-ce que quelqu'un l'a déjà utilisée pratiquement ?

Merci et cordiales salutations
Pierre-Yves

"Michel__D" a écrit dans le
message de news:
Bonjour,

Pierre-Yves a écrit :
Bonjour,

Voila, il s'agit de faire exécuter un fichier de commande depuis un
script VBS et d'attendre que son exécution soit terminée avant de
continuer. Pour cela j'ai utilisé le code suivant sur un serveur
Windows 2003 :

strCmd = "%COMSPEC% /c start /D d:toolsbatch /NORMAL /WAIT
CleanupUsr.cmd"
WshShell.Run strCmd,0,True

Malheureusement, le fichier de commande ne s'exécute pas via VBS
(j'ai l'impression qu'il ne se passe rien), alors que lorsque je
l'exécute en interactif (en double-cliquant dessus) il s'exécute
sans problème.

Quelqu'un aurai-t-il une idée ?



Si par "(j'ai l'impression qu'il ne se passe rien)" tu veux dire que
tu ne vois rien il suffit de changer le 0 en une autre valeur qui
montre
la fenêtre de commande, par exemple :

strCmd="%COMSPEC% /c d:toolsbatchCleanupUsr.cmd"
CreateObject("WScript.Shell").Run strCmd, 3, True

PS:Et pour être sur que l'attente se fait bien, il peut être inséré une
pause dans le fichier batch (CleanupUsr.cmd).