web-dev-qa-db-ja.com

別のvbscriptからvbscriptを実行する

Vbscriptを取得して別のvbscriptを実行するにはどうすればよいですか?

ほんの数行のコードを想像しますが、これを試したことはありません。2の間では何も渡されません。

たとえば、実行中のスクリプトはTestScript.vbsと呼ばれ、呼び出し/実行する他のスクリプトはSecondscript.vbsと呼ばれ、どちらもC:\ Tempにあります。

ありがとうマーク

18
markdigi

以下が機能するかどうかを確認します

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

objShell.Run "TestScript.vbs" 

' Using Set is mandatory
Set objShell = Nothing
23
Martin

完了するために、次のような3つの引数を送信できます。

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

Wshshell.Runメソッドを使用して試してみることができます。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は、スクリプトに渡す引数です。 (注:引数はスペースで区切られます。スペースを含む引数を使用する場合は、その引数を引用符で囲む必要があります[これを行う安全な方法はuseCHR (34)ProgramArgs= chr (34) & "/Hello World" & chr (34)])
IntWindowStyleは、ウィンドウの表示方法を決定する整数です。これとWaitOnReturnの詳細については、こちらをご覧ください WshShell.Run Method
WaitOnReturntrueの場合、スクリプトはコマンドが終了するまで一時停止し、falseの場合、スクリプトはコマンド開始直後に続行します。

注:Runメソッドは終了コードを返すことができますが、WaitOnReturnをTrueに設定し、「WshShell.Run」を変数に割り当てる必要があります。 (例: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
_

ProgramPathRunと同じREAD RUN'S DESCRIPTION
ProgramArgsDITTO
ScriptEngineスクリプトの実行に使用するエンジン。 execメソッドにはwin32アプリケーションが必要なので、これを指定する必要があります。通常、「WScript.exe」または「CScript.exe」のいずれかです。 stdinとstdoutを使用するには(これらの詳細については後述します)、「CScript.exe」を選択する必要があります。
Processこれは、スクリプトが開始するプログラムを参照するオブジェクトです。いくつかのメンバーがあり、それらはExitCode、ProcessID、Status、StdErr、StdIn、StdOut、Terminateです。

プロセスオブジェクトのメンバーの詳細

  1. ExitCodeこれは、プロセスの終了時に返される終了コードです。
  2. ProcessIDこれはプロセスに割り当てられるIDであり、すべてのプロセスには一意のprocessIDがあります。
  3. Statusこれはプロセスのステータスを示すコード番号で、プロセスが終了すると「-1」に設定されます。
  4. StdErrこれは標準エラーストリームを表すオブジェクトです
  5. StdInこれは、標準入力ストリームを表すオブジェクトです。追加のパラメーターや、呼び出しているスクリプトに渡すものを書き込むために使用します。 (_Process.StdIn.WriteLine "Hello Other Worlds"_)
  6. StdOutこれは標準出力ストリームを表すオブジェクトで、[〜#〜] readonly [〜#〜] したがって、_Process.StdOut.ReadLine_を使用できます。これは、呼び出されたスクリプトが、呼び出し元のスクリプトの標準入力によって送信された情報を受信するストリームです。 stdinの例を使用した場合、StdOut.Readlineは「Hello Other Worlds」を返します。読み取るものが何もない場合、スクリプトは出力を待機中にハングします。スクリプトが応答しないように見えることを意味します
    注:必要に応じて、Readの代わりにReadAllまたはReadLineを使用できます。 X個の文字を読み取る場合は、Read (X)を使用します。または、残りのストリームが必要な場合はReadAll
  7. Terminateこのメソッドを呼び出して、プロセスを強制終了します。

WshShell.Execの詳細については、 Exec Method Windows Scripting Hostを参照してください。

7
Ronnie Matthews

スクリプトの本体をロードして、同じプロセス内で実行することもできます。

Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile("script2.vbs")
body = ts.ReadAll
ts.Close
Execute body
5
Alain Tésio

これを試して。

Option Explicit

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

Shellobj.Run "Test.vbs" 

Set Shellobj = Nothing
2

引数にスペースを入れて怒ったり、変数を使用したくない場合は、これを試してください:

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

どこ

r=123
c="Whatever comment you like"
1
redphender

以下のコードが動作するのを見ました。シンプルですが、文書化されていないと思います。他の誰かが「実行」コマンドを使用しましたか?

   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
1
Andreas

Martin's Answer はまったく機能しませんでした( "File not found")および atesio's Answer は、変数定義の繰り返しを含む2つのスクリプトの呼び出しを許可しません。最終的に私のために働いた別の選択肢:

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

(Windows 8.1)

0
thewaywewalk