HTA& Batch Hybrid,从BATCH部分传递变量

时间:2017-03-29 22:07:02

标签: batch-file vbscript cmd hta

我试图编写一个批处理+ hta混合脚本,它允许我将变量从脚本的批处理部分传递到hta部分,这样我就可以生成像计算机型号等的东西。

这是我到目前为止 - 批处理:

<!-- :: 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%作为参数,并尝试在我的VBScript部分中使用arg1来尝试使用该变量 - 但它不起作用。

所以在我的hta部分中,这是我的vbscript:

<script language="VBScript">

    MsgBox arg1

</script>

只打开一个空盒子。

我一直在寻找一段时间在网上试图找到一种方法来做到这一点,我无法弄明白。之前解决这个问题的方法基本上是创建一个批处理脚本,创建一个新的文件,即hta&amp; amp;批量混合,但我想避免这样做以简化。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:6)

您可以使用Wscript.Shell COM对象的Environment对象访问HTA运行时中的环境变量。您可以使用Scripting.FileSystemObject的{​​{1}}方法将数据从HTA传回到stdout上的Batch线程。以下是两者的演示:

GetStandardStream

对于它的价值,您还可以使用<!-- :: 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文件扩展名以混合格式访问VBScript。除了消除出现和消失的HTA窗口的短暂闪烁之外,优点是您可以直接传递脚本参数而无需访问cscript范围。

Environment("Process")

hybrid Batch + JScript更加容易。使用.wsf方法也可以将both VBScript and JScript code作为多个作业。