【问题标题】:Input form for batch with HTA使用 HTA 进行批处理的输入表
【发布时间】:2018-02-22 16:05:48
【问题描述】:

如何在 HTA 中制作一个简单的输入表单并在一个简单的变量中批量读取, 和一个按钮继续。我不知道有任何其他方法可以为批处理文件制作一个像样的 GUI。 像这样的

感谢任何帮助。

【问题讨论】:

  • 你的批次到底是做什么的?
  • 有人需要输入序列号并按名称批量搜索特定文件并打印,我已经这样做了。我只需要一个输入类型,它必须输入 SN 并按下一步,然后批处理完成其余的工作
  • edit您的问题并添加您的批处理代码!

标签: user-interface batch-file cmd hta


【解决方案1】:

简而言之,你需要做的就是

  • 获取.hta文件内标准输出流的引用,并将字段内容写入此输出

  • 使用for /f 命令从批处理文件执行.hta,以处理发送到标准输出的数据。

唯一的“问题”是您需要使用.hta 文件的完整路径显式调用mshta.exe 可执行文件。

serialNumber.hta

<HTML>
    <HEAD>
        <HTA:APPLICATION 
            ID              = "serialHTA" 
            APPLICATIONNAME = "serialHTA"
            VERSION         = "0.1"
            NAVIGABLE       = "yes"
            SHOWINTASKBAR   = "yes" 
            SINGLEINSTANCE  = "yes" 
            WINDOWSTATE     = "normal"

            BORDER          = "normal" 
            BORDERSTYLE     = "normal"
            INNERBORDER     = "no" 

            CAPTION         = "yes" 
            MINIMIZEBUTTON  = "yes"
            MAXIMIZEBUTTON  = "yes"
            SYSMENU         = "yes" 
            SCROLL          = "yes" 
            SCROLLFLAT      = "yes"

            CONTEXTMENU     = "yes"
            SELECTION       = "yes"
        />

        <TITLE>input serial number</TITLE>

        <SCRIPT language="Javascript">
            function closeHTA(sendOutput){
                if (sendOutput){
                    (new ActiveXObject('Scripting.FileSystemObject'))
                        .GetStandardStream(1)
                        .WriteLine(
                            document.getElementById('serialNumber').value
                        );
                };
                window.close();
            }
        </SCRIPT>

    </HEAD>

    <BODY>
        <label for="serialNumber">serial:</label>
        <input type="text" id="serialNumber">
        <br>
        <button onclick="closeHTA(true);">ok</button>
        <button onclick="closeHTA();">cancel</button>
    </BODY>

</HTML>

serialNumber.cmd

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "serialNumber="
    for /f "delims=" %%a in ('mshta.exe "%~dp0\serialnumber.hta"') do set "serialNumber=%%a"

    if defined serialNumber (
        echo Serial number: %serialNumber%
    ) else (
        echo No serial number provided
    )

【讨论】:

  • 谢谢,这正是我想要的,但我怎样才能像 w:400 h:200 这样调整 hta 窗口的大小?
  • @RaduMihai 你也可以看看这个整洁的线程Using "HTA input forms" in Batch files
【解决方案2】:

或者,您可以像这样从一个文件运行它

<!-- :: Batch section
@echo off
    setlocal enableextensions disabledelayedexpansion

    set "serialNumber="
    for /f "delims=" %%a in ('mshta.exe "%~F0"') do set "serialNumber=%%a"

    if defined serialNumber echo %serialNumber%
pause
-->
<HTML>
    <HEAD>
        <HTA:APPLICATION 
            ID              = "serialHTA" 
            APPLICATIONNAME = "serialHTA"
            VERSION         = "0.1"
            NAVIGABLE       = "yes"
            SHOWINTASKBAR   = "yes" 
            SINGLEINSTANCE  = "yes" 
            WINDOWSTATE     = "normal"

            BORDER          = "normal" 
            BORDERSTYLE     = "normal"
            INNERBORDER     = "no" 

            CAPTION         = "yes" 
            MINIMIZEBUTTON  = "yes"
            MAXIMIZEBUTTON  = "yes"
            SYSMENU         = "yes" 
            SCROLL          = "yes" 
            SCROLLFLAT      = "yes"

            CONTEXTMENU     = "yes"
            SELECTION       = "yes"
        />

        <TITLE>input serial number</TITLE>

        <SCRIPT language="Javascript">
            function closeHTA(sendOutput){
                if (sendOutput){
                    (new ActiveXObject('Scripting.FileSystemObject'))
                        .GetStandardStream(1)
                        .WriteLine(
                            document.getElementById('serialNumber').value
                        );
                };
                window.close();
            }
        </SCRIPT>

    </HEAD>

    <BODY>
        <label for="serialNumber">serial:</label>
        <input type="text" id="serialNumber">
        <br>
        <button onclick="closeHTA(true);">ok</button>
        <button onclick="closeHTA();">cancel</button>
    </BODY>

</HTML>

【讨论】:

  • 好主意。我尝试运行它并在第 42 行收到错误“文件句柄无效”: (new ActiveXObject('Scripting.FileSystemObject')).GetStandardStream(1).WriteLine(document.getElementById('serialNumber').value);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2022-01-05
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多