2016-10-08 11 views
1

cscript.exeを使用せずにVBScriptから引数を渡して返しますか?VBScriptの引数を取得する

例えば、cscript.exeの関与なしでscript1に値を返すscript1からscript2を呼び出したいとします。 私は様々な答えを探しましたが、どういうわけかcscript.exeの使用が関係しています。

このスクリプトは、インストールされた音声を取得し、ファイルvoice.txtで提供されるものを設定します。

Set WshShell = CreateObject("WScript.Shell") 
WShShell.CurrentDirectory = "..\Confirmatory Texts" 

Set FSO = CreateObject("Scripting.FileSystemObject") 

If FSO.FileExists("voice.txt") Then 
    Set temp = FSO.OpenTextFile("voice.txt") 
    confirm_voice = temp.ReadLine() 
    temp.Close 

    Set Sapi = CreateObject("SAPI.SpVoice") 

    For Each Voice In Sapi.GetVoices 
    i = i + 1 
    Next 

    For loopvar = 0 To i-1 
    If loopvar = CInt(confirm_voice) Then 
     Set Sapi.Voice = Sapi.GetVoices.Item(loopvar) 
    End If 
    Next 
Else 
    WScript.Echo "An Error Occured" 
End If 

私は別のスクリプトからこのスクリプトを呼び出した場合、どのように私は、このスクリプトは、それを呼び出したスクリプトにいくつかの値を返すようにすることができますか?

+0

してください[編集]あなたの質問と[MCVE] _both_スクリプトの提供。現在書かれているように、あなたの質問は、 'script2'とは何か、' script1'とは何か、どうやってお互いを呼び出すのかは少し不明です... 'cscript.exe'の代わりに' wscript.exe'を使わないのはなぜですか? BTW、 'Sapi.GetVoices.Item(loopvar)'は**オブジェクト** 'ISpeechObjectToken'です。文字列として扱うことはできません。 – JosefZ

+0

VBScriptのヘルプファイルはhttps://www.microsoft.com/en-au/download/details.aspx?id=2764です。 *スクリプトコンポーネント*を参照してください。もう1つの方法は、32ビットのCScriptを使用してスクリプトコントロールを読み込み、2番目のスクリプトをスクリプトコントロールに読み込んで実行することです。ここの私の答えは - http://stackoverflow.com/questions/26952155/how-to-make-an-include-activex-object-in-vb6-for-vbscriptを示しています。 –

+0

私はそれを呼び出すスクリプトにいくつかの値を返す上記のスクリプトを望んでいます、どうすればいいですか?そして、お返事いただきありがとうございました – Abhishek

答えて

2

VBScriptは実際に他のVBScriptファイルの呼び出しまたはインポートのメカニズムを提供しません。最も近いのは、他のファイルの内容を読み込んで、ExecuteGlobalで実行することです。

デモンストレーション:

同じディレクトリに次の2つのファイルを入れて、script1.vbsを実行します。 script2.vbsの内容を読んで、ExecuteGlobalでコードを実行することによって、グローバルスコープで機能Squareを利用できるようにします。関数がグローバルスコープで利用可能になると、それは残りのスクリプトで使用できます。

script1.vbs

Set fso = CreateObject("Scripting.FileSystemObject") 

dir = fso.GetParentFolderName(WScript.ScriptFullName) 
script = fso.BuildPath(dir, "script2.vbs") 

ExecuteGlobal fso.OpenTextFile(script).ReadAll '"import" code into global scope 

WScript.Echo Square(3) 

script2.vbs

Function Square(i) 
    Square = i*i 
End Function 
+0

答えてくれてありがとう、私はそのアプローチを試みます。 – Abhishek

関連する問題