2013-08-26 5 views
1

Je rencontre des problèmes pour faire fonctionner les méthodes Run (ou Exec) avec VBS. J'ai eu tellement de difficulté à exécuter une commande arbitraire que j'ai eu recours à la commande dans un fichier batch et que j'essayais d'utiliser Run pour appeler le fichier .bat. Même cette méthode ne fonctionne pas. Code est la suivante:VBS WScript ne parvient pas à s'exécuter

Dim objShell 
Set objShell = CreateObject("Wscript.Shell") 
objShell.Run "C:\Path\to\my\batch.bat" 
Set objShell = Nothing 

Ouverture d'une invite de commande et en entrant simplement « C: \ chemin \ \ my \ batch.bat » Circule exactement comme j'attendre à. Cependant, lorsque vous utilisez le code VBS ci-dessus, il ne fait rien du tout. La commande dans le fichier de commandes est simple et comprend le chemin d'accès à l'exécutable, puis un chemin vers un fichier sur lequel l'exécutable doit agir. Modifier la commande Exécuter ci-dessus comme suit entraîne la même chose que d'essayer d'appeler le fichier batch - rien du tout.

objShell.Run "C:\Path\to\my\executable.exe C:\Path\to\my\file.extension" 

Mon but ultime serait de construire le chemin de fichier chaîne dans le script, mais qui semble hors de propos quand même hardcoding elle échoue. Toute aide serait très appréciée.

+0

Si chemin d'accès exécutable dans batch.bat un chemin d'accès complet? –

+0

Vous mai être des citations manquantes. Exemple: 'objShell.Run" "" c: \ Program Files \ Windows NT \ Accessoires \ wordpad.exe "" "" c: \ Users \ Public \ desktop.ini "" "' –

+0

Mon fichier de commandes utilise le chemin d'accès complet à l'exe (et le chemin complet vers le fichier). – cayniarb

Répondre

2

j'ai pu résoudre ce avec deux changements. D'abord, j'ai ajouté "cmd/c" au début de ma commande.

Cela a entraîné l'obtention d'une erreur différente (fichier non trouvé) et il était en fait causé par des problèmes de synchronisation avec le programme que j'essayais d'exécuter. L'ajout d'un délai d'une seconde après la commande Exécuter (avant de disposer de l'objet objSehll) a résolu ce problème.

Merci à tous ceux qui ont répondu.

1

Essayez

objShell.Exec "C:\Path\to\my\batch.bat" 

Ou

objShell.Run "%comspec% /K C:\Path\to\my\batch.bat"