2017-03-29 3 views
4

バッチ+ htaハイブリッドスクリプトを作成しようとしていますが、スクリプトのバッチセクションからhtaセクションに変数を渡すことができます。コンピューターのモデル番号のようなものなどHTAとバッチハイブリッド、BATCHセクションの変数を渡す

これは、これまで私が持っているものである - バッチ:

<!-- :: Batch section 
    @echo off 
    Pushd "%~dp0" 
    setlocal 

    FOR /F "tokens=2 delims='='" %%A in ('wmic ComputerSystem Get Model /value') do SET model=%%A 

    for /F "delims=" %%a in ('mshta.exe "%~F0" "%model%"') do set "HTAreply=%%a" 
    echo End of HTA window, reply: "%HTAreply%" 
    goto :EOF 
    --> 

あなたは、私がパラメータとして%model%使用しようとしましたが、私は私の中でarg1を使用しようとした見ることができるようにVBScriptセクションでその変数を使用しようとしましたが、動作しませんでした。ちょうど空のボックスを開きます

<script language="VBScript"> 

    MsgBox arg1 

</script> 

は、だから私のHTAセクションでは、これが私のVBScriptのです。

私はオンラインでこれを行う方法を見つけようとしてきましたが、私はそれを理解できません。私がこれまでにやったのは、基本的にhta &バッチハイブリッドである新しいファイルを作成するバッチスクリプトを作成することでしたが、単純化するためにそのことを避けたいと思います。

すべてのヘルプは非常にあなたがWscript.Shell COMオブジェクトのEnvironmentオブジェクトを使用して、HTAの実行時に環境変数にアクセスすることができます

答えて

5

をいただければ幸いです。 Scripting.FileSystemObjectGetStandardStreamメソッドを使用して、HTAからstdout経由でバッチスレッドにデータを戻すことができます。ここでは、両方のデモです:それは価値がある何のため

<!-- :: Batch section 
@echo off & setlocal 
Pushd "%~dp0" 

FOR /F "tokens=2 delims==" %%A in ('wmic ComputerSystem Get Model /value') do SET model=%%A 

for /F "delims=" %%a in ('mshta.exe "%~f0"') do set "HTAreply=%%a" 
echo End of HTA window, reply: "%HTAreply%" 
goto :EOF 
--> 
<script language="VBScript"> 

    Set Env = CreateObject("Wscript.Shell").Environment("Process") 
    Set StdOut = CreateObject("Scripting.FileSystemObject").GetStandardStream(1) 

    MsgBox Env("model") 
    StdOut.Write("response") 

    Set Env = Nothing 
    Set StdOut = Nothing 

    close() 

</script> 

、あなたもふり.wsfファイル拡張子をkludgingによってcscriptを用いたハイブリッド形式でVBScriptをアクセスすることができます。利点は、HTAウィンドウの短時間のちらつきを取り除くことに加えて、Environment("Process")スコープにアクセスせずにスクリプト引数を直接渡すことができるということです。

<!-- : batch portion 
@echo off & setlocal 

FOR /F "tokens=2 delims==" %%A in ('wmic ComputerSystem Get Model /value') do SET model=%%A 

for /F "delims=" %%a in ('cscript /nologo "%~f0?.wsf" "%model%"') do set "VBreply=%%a" 
echo End of VB script, reply: "%VBreply%" 

goto :EOF 

: VBScript --> 
<job> 
    <script language="VBScript"> 
     model = WScript.Arguments(0) 

     MsgBox model 
     Wscript.Echo "response" 
    </script> 
</job> 

およびhybrid Batch + JScriptはさらに簡単です。また、.wsfメソッドを使用して複数のジョブとしてboth VBScript and JScript codeを使用することもできます。

+0

本当に素晴らしいです、ありがとうございます – GrumpyCrouton

関連する問題