Vbscriptを取得して別のvbscriptを実行するにはどうすればよいですか?
ほんの数行のコードを想像しますが、これを試したことはありません。2の間では何も渡されません。
たとえば、実行中のスクリプトはTestScript.vbsと呼ばれ、呼び出し/実行する他のスクリプトは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.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です。
プロセスオブジェクトのメンバーの詳細
Process.StdIn.WriteLine "Hello Other Worlds"
_)Process.StdOut.ReadLine
_を使用できます。これは、呼び出されたスクリプトが、呼び出し元のスクリプトの標準入力によって送信された情報を受信するストリームです。 stdinの例を使用した場合、StdOut.Readlineは「Hello Other Worlds」を返します。読み取るものが何もない場合、スクリプトは出力を待機中にハングします。スクリプトが応答しないように見えることを意味しますRead
の代わりにReadAll
またはReadLine
を使用できます。 X個の文字を読み取る場合は、Read (X)
を使用します。または、残りのストリームが必要な場合はReadAll
。WshShell.Execの詳細については、 Exec Method Windows Scripting Hostを参照してください。
スクリプトの本体をロードして、同じプロセス内で実行することもできます。
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
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)