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