while vbs vbscript

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

  1. ExitCode Este es el código de salida que se devuelve cuando finaliza el proceso.
  2. ProcessID 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, utilícelo para escribir parámetros adicionales o cualquier cosa que quiera pasar al script que está llamando. ( Process.StdIn.WriteLine "Hello Other Worlds" )
  6. 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 usar Read o ReadAll lugar de ReadLine si lo desea. Use Read (X) si desea leer X cantidad de caracteres. O ReadAll si quieres el resto de la transmisión.
  7. 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