2009-11-06 29 views
15

¿Cómo obtengo un vbscript para ejecutar otro vbscript?Ejecuta un vbscript desde otro vbscript

Imagino que son solo unas pocas líneas de código pero no se ha intentado hacer esto antes, nada se pasa entre los 2, solo se necesita pasar/llamar al otro.

Por ejemplo, la secuencia de comandos que se ejecuta se llama TestScript.vbs, la otra secuencia de comandos para llamar/ejecutar se denominará Secondscript.vbs, que se encuentran en C: \ Temp.

Gracias Marcos

+0

puedes hacerlo usando .bat – ukanth

+0

Sé que es capaz de con a.¿Pero no hay una forma de hacerlo dentro del guión actual? – markdigi

Respuesta

20

ver si las siguientes obras

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

objShell.Run "TestScript.vbs" 

' Using Set is mandatory 
Set objShell = Nothing 
+0

Intenté esto, variable indefinida, ¿tengo que agregar una declaración también? – markdigi

+0

Ignora mi respuesta original: era basura. Esperemos que lo anterior resuelva su problema. – Martin

7

sólo para completar, usted podría enviar 3 argumentos así:

objShell.Run "TestScript.vbs 42 ""an arg containing spaces"" foo" 
+0

Gracias, blairxy: esa fue la información que vine a buscar. – Smandoli

5

También puede cargar el cuerpo de la script y ejecútelo dentro del mismo proceso:

Set fs = CreateObject("Scripting.FileSystemObject") 
Set ts = fs.OpenTextFile("script2.vbs") 
body = ts.ReadAll 
ts.Close 
Execute body 
1

En caso de que no desea conseguir loco de espacios en los argumentos y desea utilizar variables de intentar esto:

objshell.run "cscript ""99 Writelog.vbs"" /r:" & r & " /f:""" & wscript.scriptname & """ /c:""" & c & "" 

donde

r=123 
c="Whatever comment you like" 
0

Como Martin's Answer no funcionaba en absoluto para me ("Archivo no encontrado") y atesio's Answer no permite llamar a dos scripts que incluyen definiciones de variables repetitivas, aquí hay otra alternativa que finalmente funcionó para mí:

filepath = Chr(34) & "C:\...\helloworld.vbs" & Chr(34) 
Set objshell= CreateObject("WScript.Shell") 
objshell.Run "wscript " & filepath, , True 
Set objshell= Nothing 

(Windows 8.1)

1

Vi que funcionaba el siguiente código. Simple, pero supongo que no está documentado. ¿Alguien más usó el comando 'Ejecutar'?

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 
6

Puede intentar usar el método Wshshell.Run que le da poco control del proceso que comienza con él. O puede utilizar el método WshShell.Exec que dará el control de darlo por terminado, obtener una respuesta, pasar más parámetros (distintos de los argumentos de línea de comandos), obtener el estado, y otros

Para utilizar Ejecutar (método 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 es la ruta completa a la secuencia de comandos que desea ejecutar
ProgramArgs son los argumentos que desea pasar a la secuencia de comandos. (NOTA: los argumentos están separados por un espacio, si desea utilizar un argumento que contenga un espacio, deberá incluir ese argumento entre comillas [Una forma segura de hacerlo es usar CHR (34) Ejemplo ProgramArgs= chr (34) & "/Hello World" & chr (34)])
IntWindowStyle es el número entero que determina cómo se mostrará la ventana.Más información sobre esto y WaitOnReturn se puede encontrar aquí WshShell.Run Method
WaitOnReturn si es verdadero, el script se detendrá hasta que el comando haya terminado, si es falso, el script continuará justo después de iniciar el comando.

NOTA: El método Ejecutar puede devolver el código de salida, pero debe establecer WaitOnReturn en True y asignar el 'WshShell.Run' a una variable. (EX: ExitCode=WshShell.Run (Command,intWindowStyle,True))

utilizar EXEC (Método Avanzado)

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 mismo que la descripción Run READ'S RUN
ProgramArgs DITTO
ScriptEngine El motor va a utilizar para ejecutar el script ya que el método exec requiere una aplicación win32, debe especificar esto. Por lo general, ya sea "WScript.exe" o "CScript.exe"
Proceso este es el Objeto que hace referencia al programa que iniciará la secuencia de comandos. Tiene varios miembros y son: ExitCode, ProcessID, Status, StdErr, StdIn, StdOut, Terminate.

más detalles acerca de los miembros del proceso objeto

  1. ExitCode Este es el código de salida que se devuelve cuando el proceso termina.
  2. ID de proceso Este es el ID que se asigna al proceso, cada proceso tiene un ID de proceso único.
  3. Estado Este es un número de código que indica el estado del proceso, se establece en '-1' cuando finaliza el proceso.
  4. StdErr Este es el objeto que representa el flujo de error estándar
  5. StdIn Este es el objeto que representa el flujo de entrada estándar, lo utilizan para escribir parámetros adicionales o cualquier cosa que desea pasar a la secuencia de comandos que está corriendo. (Process.StdIn.WriteLine "Hello Other Worlds")
  6. StdOut Este es el objeto que representa la salida estándar Stream, Es READONLY esta manera puede utilizar Process.StdOut.ReadLine Si no hay nada que leer a continuación, la secuencia de comandos se colgará a la espera de una salida. lo que significa que la secuencia de comandos parecerá ser No responde
  7. Terminar Llamar a este método para forzar la finalización del proceso.

Para obtener más información acerca de WshShell.Exec ir a Exec Method Windows Scripting Host

2

Prueba esto.

Option Explicit 

On error resume next 
Dim Shellobj 
Set Shellobj = CreateObject("WScript.Shell") 

Shellobj.Run "Test.vbs" 

Set Shellobj = Nothing