Запустите vbscript из другого vbscript

Как мне получить vbscript для запуска другого vbscript?

Id представьте себе только несколько строк кода, но не пробовал делать это раньше, ничего не передается между 2, нужно просто вызвать/запустить другой.

В качестве примера запускаемый script называется TestScript.vbs, другой script для его вызова/запуска будет вызываться Secondscript.vbs, оба из которых расположены в C:\Temp.

Спасибо Марк

Ответы

Ответ 1

Посмотрите, работает ли следующее

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

objShell.Run "TestScript.vbs" 

' Using Set is mandatory
Set objShell = Nothing

Ответ 2

Чтобы завершить, вы можете отправить 3 аргумента следующим образом:

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

Ответ 3

Вы можете попробовать использовать метод Wshshell.Run, который дает вам небольшой контроль над процессом, который вы начинаете с него. Или вы можете использовать метод WshShell.Exec, который даст вам возможность закончить его, получить ответ, передать больше параметров (кроме аргументов командной строки), получить статус и другие.

Чтобы использовать Run (простой метод)

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 - это полный путь к вашему script, который вы хотите запустить. ProgramArgs - это аргументы, которые вы хотите передать в script. (ПРИМЕЧАНИЕ: аргументы разделяются пробелом, если вы хотите использовать аргумент, содержащий пробел, тогда вам придется заключить этот аргумент в кавычки. [Безопасный способ сделать это - использовать CHR (34) Пример ProgramArgs= chr (34) & "/Hello World" & chr (34)])
IntWindowStyle - это целое число, определяющее, как будет отображаться окно. Подробнее об этом и WaitOnReturn можно найти здесь WshShell.Run Method
WaitOnReturn, если true, тогда script остановится до тех пор, пока команда не завершится, если false, то script будет продолжаться сразу после запуска команды.

ПРИМЕЧАНИЕ. Метод Run может возвращать код выхода, но вы должны установить WaitOnReturn в True и присвоить переменной WshShell.Run. (EX: ExitCode=WshShell.Run (Command,intWindowStyle,True))

Использование EXEC (расширенный метод)

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, аналогично Run READ RUN DESCRIPTION
ProgramArgs DITTO
ScriptEngine Двигатель, который вы будете использовать для выполнения script. поскольку для метода exec требуется приложение win32, вам необходимо указать это. Обычно либо "WScript.exe", либо "CScript.exe"
Процесс - это объект, который ссылается на программу, начинающуюся с script. Он имеет несколько членов, и они: ExitCode, ProcessID, Status, StdErr, StdIn, StdOut, Terminate.

Подробнее о членах объекта процесса

  • ExitCode. Это код выхода, который возвращается при завершении процесса.
  • ProcessID. Это идентификатор, назначенный процессу, каждый процесс имеет уникальный идентификатор processID.
  • Статус. Это код, который указывает статус процесса, после завершения процесса он получает значение "-1".
  • StdErr Это объект, который представляет стандартный поток ошибок
  • StdIn. Это объект, который представляет стандартный поток ввода, использует его для записи дополнительных параметров или всего, что вы хотите передать в script, который вы используете. (Process.StdIn.WriteLine "Hello Other Worlds")
  • StdOut. Это объект, представляющий стандартный поток вывода. Он READONLY, поэтому вы можете использовать Process.StdOut.ReadLine Если читать нечего, тогда script будет зависать, ожидая выхода, что означает, что script будет не отвечать
  • Terminate Вызовите этот метод, чтобы принудительно завершить процесс.

Для получения дополнительной информации о WshShell.Exec перейдите в Exec Method Windows Scripting Host

Ответ 4

Вы также можете загрузить тело script и выполнить его в рамках одного процесса:

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

Ответ 5

Попробуйте это.

Option Explicit

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

Shellobj.Run "Test.vbs" 

Set Shellobj = Nothing

Ответ 6

Если вы не хотите злиться на пробелы в аргументах и ​​хотите использовать переменные, попробуйте это:

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

где

r=123
c="Whatever comment you like"

Ответ 7

Я видел, как работает код ниже. Простой, но, я думаю, не документировано. Кто-нибудь еще использовал команду "Выполнить"?

   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

Ответ 8

Как Ответ Мартина не работал вообще для меня ( "Файл не найден" ) и atesio Answer не позволяет вызывать два сценария, которые включают в себя повторяющиеся определения переменных, вот еще одна альтернатива, которая в конечном итоге помогла мне:

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

(Windows 8.1)