批处理文件 – HTA和Batch Hybrid,从BATCH部分传递变量

批处理文件 – HTA和Batch Hybrid,从BATCH部分传递变量,第1张

概述我正在尝试编写一个批处理hta混合脚本,它允许我将变量从脚本的批处理部分传递到hta部分,这样我就可以生成像计算机型号等的东西. 这是我到目前为止 – 批次: <!-- :: Batch section @echo off Pushd "%~dp0" setlocal FOR /F "tokens=2 delims='='" %%A in ('wmic Compu 我正在尝试编写一个批处理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;批量混合,但我想避免这样简单.

任何帮助将非常感激

解决方法 您可以使用Wscript.Shell COM对象的Environment对象访问HTA运行时中的环境变量.您可以使用Scripting.fileSystemObject的GetStandardStream方法将数据从HTA传递回stdout上的Batch线程.以下是两者的演示:

<!-- :: Batch section@echo off & setlocalPushd "%~dp0"FOR /F "tokens=2 delims==" %%A in ('wmic ComputerSystem Get Model /value') do SET model=%%Afor /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>

对于它的价值,你也可以通过kludging伪装.wsf文件扩展名使用cscript以混合格式访问VBScript.除了消除出现和消失的HTA窗口的短暂闪烁之外,优点是您可以直接传递脚本参数而无需访问环境(“进程”)范围.

<!-- : batch portion@echo off & setlocalFOR /F "tokens=2 delims==" %%A in ('wmic ComputerSystem Get Model /value') do SET model=%%Afor /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作为多个作业.

总结

以上是内存溢出为你收集整理的批处理文件 – HTA和Batch Hybrid,从BATCH部分传递变量全部内容,希望文章能够帮你解决批处理文件 – HTA和Batch Hybrid,从BATCH部分传递变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/998832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存