Ответ 1
Посмотрите, работает ли следующее
Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "TestScript.vbs"
' Using Set is mandatory
Set objShell = Nothing
Как мне получить vbscript для запуска другого vbscript?
Id представьте себе только несколько строк кода, но не пробовал делать это раньше, ничего не передается между 2, нужно просто вызвать/запустить другой.
В качестве примера запускаемый script называется TestScript.vbs, другой script для его вызова/запуска будет вызываться Secondscript.vbs, оба из которых расположены в C:\Temp.
Спасибо Марк
Посмотрите, работает ли следующее
Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
objShell.Run "TestScript.vbs"
' Using Set is mandatory
Set objShell = Nothing
Чтобы завершить, вы можете отправить 3 аргумента следующим образом:
objShell.Run "TestScript.vbs 42 ""an arg containing spaces"" foo"
Вы можете попробовать использовать метод 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.
Подробнее о членах объекта процесса
Process.StdIn.WriteLine "Hello Other Worlds"
)Process.StdOut.ReadLine
Если читать нечего, тогда script будет зависать, ожидая выхода, что означает, что script будет не отвечатьДля получения дополнительной информации о WshShell.Exec перейдите в Exec Method Windows Scripting Host
Вы также можете загрузить тело script и выполнить его в рамках одного процесса:
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile("script2.vbs")
body = ts.ReadAll
ts.Close
Execute body
Попробуйте это.
Option Explicit
On error resume next
Dim Shellobj
Set Shellobj = CreateObject("WScript.Shell")
Shellobj.Run "Test.vbs"
Set Shellobj = Nothing
Если вы не хотите злиться на пробелы в аргументах и хотите использовать переменные, попробуйте это:
objshell.run "cscript ""99 Writelog.vbs"" /r:" & r & " /f:""" & wscript.scriptname & """ /c:""" & c & ""
где
r=123
c="Whatever comment you like"
Я видел, как работает код ниже. Простой, но, я думаю, не документировано. Кто-нибудь еще использовал команду "Выполнить"?
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
Как Ответ Мартина не работал вообще для меня ( "Файл не найден" ) и 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)