web-dev-qa-db-fra.com

Voulez-vous utiliser VBScript pour exécuter le fichier .bat dans un autre dossier

J'essaie d'exécuter un fichier .bat en utilisant VBScript. Je peux faire en sorte que VBScript fonctionne lorsqu'il est exécuté dans le même dossier que le .bat, mais je ne vois pas comment le faire fonctionner correctement en dehors du dossier.

Dim Shell
Set Shell = CreateObject("WScript.Shell")
Shell.Run "C:\Users\js\Desktop\createIndex\createindex.bat"
6
jodies

Sortir des sentiers battus Je suppose que le script de traitement par lots nécessite que son propre dossier parent soit le répertoire de travail. Vous pouvez définir le répertoire de travail en conséquence en modifiant votre code comme suit:

Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\js\Desktop\createIndex"
Shell.Run "createindex.bat"

Si les solutions ci-dessus ne vous aident pas, vous devez fournir davantage d'informations sur ce que devrait se produire et ce qui se passe réellement se produit. L'exécution de la commande/du script externe en mode visible sans fermer automatiquement CMD aide généralement au débogage:

Shell.CurrentDirectory = "C:\Users\js\Desktop\createIndex"
Shell.Run "cmd /k createindex.bat", 1, True
8
Ansgar Wiechers

J'ai 4 scripts simples pour quels types d'appels.

call.vbs

call_nowait.vbs

call_nowindow.vbs

call_nowindow_nowait.vbs

Tous les 4 ont ces lignes de code au début:

ReDim args(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
  If InStr(WScript.Arguments(i), " ") > 0 Then
    args(i) = Chr(34) & WScript.Arguments(i) & Chr(34)
  ElseIf WScript.Arguments(i) = "" Then
    args(i) = Chr(34) & WScript.Arguments(i) & Chr(34)
  Else
    args(i) = WScript.Arguments(i)
  End If
Next

Set objShell = WScript.CreateObject("WScript.Shell")

' MsgBox Join(args, " ")

De plus, la dernière ligne est différente dans les 4 scripts:

call.vbs

objShell.Run Join(args, " "), 1, True

call_nowait.vbs

objShell.Run Join(args, " "), 1, False

call_nowindow.vbs

objShell.Run Join(args, " "), 0, True

call_nowindow_nowait.vbs

objShell.Run Join(args, " "), 0, False

Par exemple, la ligne de commande complète du script call_nowindow.vbs ressemble à ceci:

call_nowindow.vbs "C:\Users\js\Desktop\createIndex\createindex.bat"

Soit dit en passant, vous pouvez utiliser n'importe quel script avec ces scripts, pas seulement des fichiers de commandes . Celui-ci créera une instance de notepad.exe avec une fenêtre de sortie:

call_nowindow.vbs notepad

Celui-ci créera la console cmd avec la date et l'heure actuelles et laissera la fenêtre ouverte:

call_nowait.vbs cmd /k echo.%DATE% %TIME%
0
Andry

Utilisez ce script pour définir le répertoire sur le répertoire de travail actuel de votre script. Ainsi, chaque fois que le script changera de répertoire, il le recherchera au lieu de l’enraciner dans un répertoire spécifique. 

 scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)

Cela rendra tous les fichiers recherchés dans ce répertoire disponibles pour le script. Exemple: Si le fichier se trouvait sur le bureau de l'utilisateur actuel.

C:\Users\[Nom d'utilisateur]\desktop\myfile.vbs

Va devenir:

scriptdir\myfile.vbs 

et si vous le déplaciez dans un sous-dossier "sous-dossier", il resterait 

scriptdir\myfile.vbs

même si l'emplacement du script est différent. "Scriptdir" est un espace réservé pour le dossier à partir duquel le script actif est en cours d'exécution. 

0
Michael Mulvey