vbscript - while - vbs timer
Ejecutar un vbscript desde otro vbscript (8)
A ver si funciona lo siguiente
Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "TestScript.vbs"
'' Using Set is mandatory
Set objShell = Nothing
¿Cómo obtengo un vbscript para ejecutar otro vbscript?
Imagino que solo son unas pocas líneas de código, pero no he intentado hacer esto antes, no se pasa nada entre las dos, una solo necesita llamar / ejecutar la otra.
Por ejemplo, la secuencia de comandos que se está ejecutando se llama TestScript.vbs, la otra secuencia de comandos a la que debe llamar / ejecutar se llamará Secondscript.vbs, y ambas se encuentran en C: / Temp.
Gracias mark
Como la Respuesta de Martin no funcionó en absoluto para mí ("Archivo no encontrado") y la Respuesta de atesio no permite llamar a dos scripts que incluyen la repetición de definiciones de variables, 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)
En caso de que no quiera enojarse con espacios en argumentos y quiera usar variables, intente esto:
objshell.run "cscript ""99 Writelog.vbs"" /r:" & r & " /f:""" & wscript.scriptname & """ /c:""" & c & ""
dónde
r=123
c="Whatever comment you like"
Prueba esto.
Option Explicit
On error resume next
Dim Shellobj
Set Shellobj = CreateObject("WScript.Shell")
Shellobj.Run "Test.vbs"
Set Shellobj = Nothing
Puede intentar usar el método Wshshell.Run que le da poco control del proceso que comienza con él. O puede usar el método WshShell.Exec que le dará control para terminarlo, obtener una respuesta, pasar más parámetros (que no sean argumentos de la línea de comando), obtener el estado y otros
Para usar Run (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 su script que desea ejecutar
ProgramArgs son los argumentos que desea pasar al script. (NOTA: los argumentos están separados por un espacio, si desea usar un argumento que contenga un espacio, tendrá que 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í Método WshShell.Run
WaitOnReturn si es verdadero, entonces 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)
)
Para 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 igual a Ejecutar LEER LA DESCRIPCIÓN DE LA EJECUCIÓN
ProgramArgs DITTO
ScriptEngine El motor que utilizará para ejecutar el script. Dado que el método exec requiere una aplicación win32, debe especificar esto. Normalmente, ya sea "WScript.exe" o "CScript.exe". Tenga en cuenta que para usar stdin y stdout (veremos qué son más abajo), debe elegir "CScript.exe".
Este es el Objeto que hace referencia al programa que iniciará el script. Tiene varios miembros y son: ExitCode, ProcessID, Status, StdErr, StdIn, StdOut, Terminate.
Más detalles sobre los miembros de Process Object
- ExitCode Este es el código de salida que se devuelve cuando finaliza el proceso.
- ProcessID Este es el ID que se asigna al proceso, cada proceso tiene un ID de proceso único.
- Estado Este es un número de código que indica el estado del proceso, se establece en ''-1'' cuando finaliza el proceso.
- StdErr Este es el objeto que representa el flujo de error estándar
- StdIn Este es el objeto que representa el flujo de entrada estándar, utilícelo para escribir parámetros adicionales o cualquier cosa que quiera pasar al script que está llamando. (
Process.StdIn.WriteLine "Hello Other Worlds"
) - StdOut Este es el objeto que representa el flujo de salida estándar, está READONLY para que pueda usar
Process.StdOut.ReadLine
. Esta es la secuencia en la que el script llamado recibirá cualquier información enviada por la entrada estándar del script que llama. Si usaste el ejemplo de stdin, StdOut.Readline devolverá "Hello Other Worlds". Si no hay nada que leer, el script se bloqueará mientras espera una salida. lo que significa que el guión parecerá que no responde
Nota: puede usarRead
oReadAll
lugar deReadLine
si lo desea. UseRead (X)
si desea leer X cantidad de caracteres. OReadAll
si quieres el resto de la transmisión. - Terminar Llame a este método para forzar la terminación del proceso.
Para obtener más información sobre WshShell.Exec, vaya a Exec Method Windows Scripting Host
Solo para completar, puedes enviar 3 argumentos como este:
objShell.Run "TestScript.vbs 42 ""an arg containing spaces"" foo"
También puede cargar el cuerpo del script y ejecutarlo dentro del mismo proceso:
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile("script2.vbs")
body = ts.ReadAll
ts.Close
Execute body
Vi el siguiente código de trabajo. Simple, pero supongo que no 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