2009-11-06 2 views
15

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

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

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

Благодаря Марк

+0

вы можете сделать это с помощью .bat – ukanth

+0

Я знаю, что его можно использовать с.bat, но есть ли способ сделать это в реальном сценарии? – markdigi

ответ

20

Смотрите, если выполнены следующие работы

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

objShell.Run "TestScript.vbs" 

' Using Set is mandatory 
Set objShell = Nothing 
+0

Пробовал это, переменная неопределенная, мне также нужно добавить декларацию? – markdigi

+0

Игнорировать мой первоначальный ответ - это был мусор. Надеемся, что вышеизложенное решит вашу проблему. – Martin

7

Просто, чтобы закончить, вы можете отправить 3 аргументы так:

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

Спасибо, blairxy - это была информация, которую я искал. – Smandoli

5

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

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

В случае, если вы не хотите, чтобы злиться с пробелами в аргументах и ​​хотите использовать переменные, попробуйте следующее:

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

где

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

Как Martin's Answer не работает вообще для me («Файл не найден») и atesio's 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)

1

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

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

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

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

использовать EXEC (Advanced метод)

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

Подробнее о членах Process Object

  1. ExitCode Это код выхода, который возвращается, когда процесс завершается.
  2. ProcessID Это идентификатор, назначенный процессу, каждый процесс имеет уникальный идентификатор processID.
  3. Состояние Это код, который указывает состояние процесса, при завершении процесса получает значение «-1».
  4. Stderr Это объект, который представляет стандартный поток ошибок
  5. STDIN Это объект, который представляет собой стандартный входной поток, использовать его, чтобы написать дополнительные параметры или все, что вы хотите передать в скрипт вы Бег. (Process.StdIn.WriteLine "Hello Other Worlds")
  6. Stdout Это объект, который представляет собой стандартный поток вывода, это READONLY так что вы можете использовать Process.StdOut.ReadLine Если нет ничего, чтобы прочитать то сценарий будет висеть в ожидании выхода. что скрипт будет выглядеть Не отвечает
  7. Terminate Вызовите этот метод, чтобы принудительно завершить процесс.

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

2

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

Option Explicit 

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

Shellobj.Run "Test.vbs" 

Set Shellobj = Nothing 
Смежные вопросы