是否可以在不使用window.close()的情况下使用javascript发送HTAREPLY

是否可以在不使用window.close()的情况下使用javascript发送HTAREPLY,javascript,batch-file,hta,Javascript,Batch File,Hta,我正在构建一个HTA/批处理脚本,其中包括一个界面,用户可以向批处理脚本发送一个HTA副本,该脚本将向服务器发送一个链接,以便在Jenkins上执行一个构建脚本。一切都很好,但我想知道我是否可以保持hta窗口打开,以便用户可以选择另一个选项,如果需要的话。有什么想法吗 我试图从javascript中删除window.close(),但是它没有将htareply发送到批处理脚本 <!-- :: Batch section @echo off setlocal echo Select an

我正在构建一个HTA/批处理脚本,其中包括一个界面,用户可以向批处理脚本发送一个HTA副本,该脚本将向服务器发送一个链接,以便在Jenkins上执行一个构建脚本。一切都很好,但我想知道我是否可以保持hta窗口打开,以便用户可以选择另一个选项,如果需要的话。有什么想法吗

我试图从javascript中删除
window.close()
,但是它没有将htareply发送到批处理脚本

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

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

-->


<HTML>
<HEAD>
<HTA:APPLICATION SCROLL="no" SYSMENU="no" >

<TITLE>HTA Radio Buttons</TITLE>
<SCRIPT language="JavaScript">
window.resizeTo(440,170);

var reply = "No button selected";
function sendreply(){
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  fso.GetStandardStream(1).WriteLine(reply);
  //window.close();
}

</SCRIPT>
</HEAD>
<BODY>
<p>Select an option.</p>
<label><input type="radio" name="option1" onclick="reply=this.value" 
value="option1">Option1</label>
<label><input type="radio" name="option2" onclick="reply=this.value" 
value="option2">Option2</label>
<label><input type="radio" name="option3" onclick="reply=this.value" 
value="option3">Option3</label>
<br><br>
<button onclick="sendreply()">Submit</button>
<button onclick="window.close()">Close</button>
</BODY>
</HTML>

HTA单选按钮
窗口。resizeTo(440170);
var reply=“未选择任何按钮”;
函数sendreply(){
var fso=新的ActiveXObject(“Scripting.FileSystemObject”);
fso.GetStandardStream(1).WriteLine(回复);
//window.close();
}
选择一个选项

选择1 选择2 选择3

提交 接近

我希望发生的是,如果用户选择并选择并提交,hta窗口将保持打开状态,直到他们选择“关闭”。for/F命令的工作方式是:首先执行嵌套命令,收集其所有输出并等待其终止;然后开始使用收集的行执行
for
正文中的命令。因此,如果希望同时(并行)执行,则不能将
用于/F

您可以使用左侧为HTA零件,右侧为批次零件的管道。但是,当
set/P
命令从管道读取输入时,它会呈现一种奇怪的行为

解决方案是使用辅助文件,以便HTA部件写入该文件并从中批量读取部件:

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

rem Initialize Batch side interface the first time
if "%~1" equ "interface" goto :interface

rem Empty pipe file
cd . > pipeFile.txt

echo Select an option:

rem Start HTA-Batch interface
mshta.exe "%~F0" >> pipeFile.txt  |  "%~F0" interface < pipeFile.txt
PAUSE
del pipeFile.txt
goto :EOF


:interface

set "HTAreply="
set /P "HTAreply="
if "%HTAreply%" equ "" goto interface

echo Reply: "%HTAreply%"
if "%HTAreply%" neq "EOF" goto interface
echo End of HTA window

goto :EOF

-->


<HTML>
<HEAD>
<HTA:APPLICATION SCROLL="no" SYSMENU="no" >

<TITLE>HTA Radio Buttons</TITLE>
<SCRIPT language="JavaScript">
window.resizeTo(440,170);

var reply = "No button selected";
var fso = new ActiveXObject("Scripting.FileSystemObject");
function sendreply(){
  fso.GetStandardStream(1).WriteLine(reply);
  //window.close();
}

</SCRIPT>
</HEAD>
<BODY>
<p>Select an option.</p>
<label><input type="radio" name="option1" onclick="reply=this.value" 
value="option1">Option1</label>
<label><input type="radio" name="option2" onclick="reply=this.value" 
value="option2">Option2</label>
<label><input type="radio" name="option3" onclick="reply=this.value" 
value="option3">Option3</label>
<br><br>
<button onclick="sendreply()">Submit</button>
<button onclick="fso.GetStandardStream(1).WriteLine('EOF'); window.close()">Close</button>
</BODY>
</HTML>

HTA单选按钮
窗口。resizeTo(440170);
var reply=“未选择任何按钮”;
var fso=新的ActiveXObject(“Scripting.FileSystemObject”);
函数sendreply(){
fso.GetStandardStream(1).WriteLine(回复);
//window.close();
}
选择一个选项

选择1 选择2 选择3

提交 接近

在该解决方案中,HTA和批处理部件通过管道
|
启动,以便两者并行运行;请记住,这两个部分之间的通信是通过管道文件执行的…

非常感谢,这正是我想要的。我也很感谢你提供更多细节。