Comment puis-je obtenir un vbscript pour exécuter un autre vbscript?
J'imagine qu'il ne s'agit que de quelques lignes de code mais que je n'ai pas essayé de le faire auparavant, rien n'est passé entre les 2, il suffit d'appeler/d'exécuter l'autre.
Par exemple, le script en cours d'exécution s'appelle TestScript.vbs, l'autre script à appeler/exécuter s'appelle Secondscript.vbs, les deux étant situés dans C:\Temp.
Merci Mark
Voir si les travaux suivants
Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "TestScript.vbs"
' Using Set is mandatory
Set objShell = Nothing
Pour compléter, vous pouvez envoyer 3 arguments comme ceci:
objShell.Run "TestScript.vbs 42 ""an arg containing spaces"" foo"
Vous pouvez essayer d'utiliser la méthode Wshshell.Run qui vous donne peu de contrôle sur le processus que vous commencez avec elle. Ou vous pouvez utiliser la méthode WshShell.Exec qui vous donnera le contrôle pour le terminer, obtenir une réponse, transmettre plus de paramètres (autres que les arguments de ligne de commande), obtenir le statut, etc.
Pour utiliser Run (Méthode simple)
Dim ProgramPath, WshShell, ProgramArgs, WaitOnReturn,intWindowStyle
Set WshShell=CreateObject ("WScript.Shell")
ProgramPath="c:\test run script.vbs"
ProgramArgs="/hello /world"
intWindowStyle=1
WaitOnReturn=True
WshShell.Run Chr (34) & ProgramPath & Chr (34) & Space (1) & ProgramArgs,intWindowStyle, WaitOnReturn
ProgramPath est le chemin complet de votre script que vous voulez exécuter.
ProgramArgs sont les arguments que vous voulez transmettre au script. (REMARQUE: les arguments sont séparés par un espace. Si vous souhaitez utiliser un argument qui contient un espace, vous devez inclure cet argument entre guillemets. [Le moyen sûr de le faire est d'utiliser CHR (34) Exemple ProgramArgs= chr (34) & "/Hello World" & chr (34)
])
IntWindowStyle est le nombre entier déterminant le mode d'affichage de la fenêtre. Plus d'informations à ce sujet et WaitOnReturn peuvent être trouvées ici Méthode WshShell.Run
WaitOnReturn si la valeur est true, le script est suspendu jusqu'à la fin de la commande. Si la valeur est false, le script continue juste après le démarrage de la commande.
REMARQUE: la méthode Run peut renvoyer le code de sortie, mais vous devez définir WaitOnReturn sur True et affecter le 'WshShell.Run' à une variable. (EX: ExitCode=WshShell.Run (Command,intWindowStyle,True)
)}
Pour utiliser EXEC (méthode avancée)
Dim ProgramPath, WshShell, ProgramArgs, Process, ScriptEngine
Set WshShell=CreateObject ("WScript.Shell")
ProgramPath="c:\test run script.vbs"
ProgramArgs="/hello /world"
ScriptEngine="CScript.exe"
Set Process=WshShell.Exec (ScriptEngine & space (1) & Chr(34) & ProgramPath & Chr (34) & Space (1) & ProgramArgs)
Do While Process.Status=0
'Currently Waiting on the program to finish execution.
WScript.Sleep 300
Loop
ProgramPath identique à Run Run DESCRIPTION DE LA RUN
ProgramArgs DITTO
ScriptEngine Le moteur que vous utiliserez pour exécuter le script. comme la méthode exec nécessite une application win32, vous devez le spécifier. Habituellement, "WScript.exe" ou "CScript.exe". Notez que pour utiliser stdin et stdout (nous verrons ce qu'ils sont un peu plus bas), vous devez choisir "CScript.exe".
Process c'est l'objet qui fait référence au programme que le script va démarrer. Il a plusieurs membres et ils sont: ExitCode, ProcessID, Status, StdErr, StdIn, StdOut, Terminate.
Plus de détails sur les membres de Process Object
Process.StdIn.WriteLine "Hello Other Worlds"
)Process.StdOut.ReadLine
. C'est le flux par lequel le script appelé reçoit toutes les informations envoyées par le stdin du script appelant. Si vous avez utilisé l'exemple de stdin, StdOut.Readline renverra "Hello Other Worlds". S'il n'y a rien à lire, le script se bloque en attendant une sortie. ce qui signifie que le script semblera être pas de réponseRead
ou ReadAll
au lieu de ReadLine
si vous le souhaitez. Utilisez Read (X)
si vous souhaitez lire une quantité X de caractères. Ou ReadAll
si vous souhaitez conserver le reste du flux.Pour plus d'informations sur WshShell.Exec, accédez à Méthode Exec Hôte de script Windows
Vous pouvez également charger le corps du script et l'exécuter dans le même processus:
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile("script2.vbs")
body = ts.ReadAll
ts.Close
Execute body
Essaye ça.
Option Explicit
On error resume next
Dim Shellobj
Set Shellobj = CreateObject("WScript.Shell")
Shellobj.Run "Test.vbs"
Set Shellobj = Nothing
Si vous ne voulez pas vous fâcher avec des espaces dans les arguments et que vous voulez utiliser des variables, essayez ceci:
objshell.run "cscript ""99 Writelog.vbs"" /r:" & r & " /f:""" & wscript.scriptname & """ /c:""" & c & ""
où
r=123
c="Whatever comment you like"
J'ai vu le code ci-dessous fonctionner… .. simple, mais je suppose que non documenté… .. Quelqu'un d'autre a utilisé la commande 'Execute'?
Dim body, my_script_file
Set Fso = CreateObject("Scripting.FileSystemObject")
Set my_script_file = fso.OpenTextFile(FILE)
body = my_script_file.ReadAll
my_script_file.Close
Execute body
Comme La réponse de Martin n'a pas fonctionné du tout pour moi ("Fichier non trouvé") et la réponse de atesio ne permet pas d'appeler deux scripts qui incluent la répétition de définitions de variables. Voici une autre alternative qui a finalement fonctionné pour moi:
filepath = Chr(34) & "C:\...\helloworld.vbs" & Chr(34)
Set objshell= CreateObject("WScript.Shell")
objshell.Run "wscript " & filepath, , True
Set objshell= Nothing
(Windows 8.1)