HTA批处理脚本点击按钮执行CMD命令的实现方案咨询
该需求完全可实现,你现有的代码框架已经完成了大部分功能,只需要补全少量代码、修正原有语法错误即可达到目标效果。
可行方案说明
- 方案一:命令输出返回原批处理窗口:复用现有
callShellApplication函数,命令执行完成后输出会打印到启动HTA的批处理窗口中,适合不需要单独弹窗的场景 - 方案二:弹出独立CMD窗口执行:修改执行逻辑调用
WScript.Shell.Run方法,可弹出可见的CMD窗口显示执行过程,适合需要看实时输出、或者交互类命令(比如远程关机的图形界面)的场景
远程关机前置注意事项:目标设备需开启远程关机权限、当前登录账号拥有目标设备的管理员权限,且两台设备在同一局域网内互通。
必要修改点
- 修正原有HTML语法错误:隐藏参数输入框缺少
id属性导致无法读取参数,style标签引号未闭合,且<body>属性错误写在了<HEAD>标签内,会导致样式失效 - 补全按钮
onclick事件:直接调用封装好的执行函数传入对应命令即可
完整修改后代码
<!-- :: 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%" goto :EOF --> <HTML> <HEAD> <HTA:APPLICATION SCROLL="no" SYSMENU="no" > <TITLE>HTA Buttons</TITLE> <SCRIPT language="JavaScript"> window.resizeTo(374,400); function sleepFor( sleepDuration ){ var now = new Date().getTime(); while(new Date().getTime() < now + sleepDuration){ /* do nothing */ } } // 原有逻辑:输出返回启动HTA的批处理窗口 function callShellApplication(command){ var args=document.getElementById('args').value; var r = new ActiveXObject("WScript.Shell"); var res=r.Exec(command +" "+args); var out=""; while (res.Status == 0) { sleepFor(100); } while (!res.StdOut.AtEndOfStream){ out=out+"\r\n"+res.StdOut.ReadLine(); } var StS=new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1); StS.Write(out); window.close(); } // 如果需要弹出独立CMD窗口,把上面的函数替换成下面这个即可 /* function callShellApplication(command){ var args=document.getElementById('args').value; var r = new ActiveXObject("WScript.Shell"); // 第二个参数1表示显示窗口,第三个参数true表示等待命令执行完成再继续 r.Run("cmd /c " + command + " " + args + " & pause", 1, true); window.close(); } */ function closeHTA(reply){ var fso = new ActiveXObject("Scripting.FileSystemObject"); fso.GetStandardStream(1).WriteLine(reply); window.close(); } </SCRIPT> </HEAD> <BODY bgcolor="black"> Aruments:<textarea id="args" name="args" style="display:none;" cols="40" rows="1"></textarea> <h1 style="color:white;font-size:40px;">Commands</h1> <hr> <button style="background-color:black; border-color:white; color:white" onclick="callShellApplication('shutdown /i')">PC shutdown</button> <button style="background-color:black; border-color:white; color:white" onclick="callShellApplication('ipconfig')">IP-Adress</button> <button style="background-color:black; border-color:white; color:white" onclick="closeHTA(1);">close</button> </BODY> </HTML>
内容的提问来源于stack exchange,提问作者user17524233
相关产品推荐
相关产品推荐

