我正在写一个页面,一旦保存到本地计算机,它就可以运行 cmd 进行 tracert , ping 和其他用于网络诊断的操作仅页面可用于最多页面,但是将结果保存到文件后我无法弄清楚如何关闭cmd窗口?
它仅在IE中有效。
运行 tracert >保存到文件>文件被拉到textarea>通过 电子邮件
我希望系统将其放入弹出窗口。
我已经尝试过:
WshShell.close()
WshShell.Quit
WScript.close
WScript.Quit
<script type="text/javascript" language="javascript">
function RunFile3() {
var domain = document.getElementById("domain").value;
WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("c:/windows/system32/cmd.exe /k tracert " + domain + " > C:/xampp/htdocs/tracert/trace.txt", 1, false);
}
</script>
</head>
<body>
<input type="text" id="domain">
!---<input type="button" value="Run Ping" onclick="RunFile2();"/>--->
<input type="button" value="Run Tracert" onclick="RunFile3();"/>
<br>
<textarea rows="30" cols="60" id="results">
</textarea>
答案 0 :(得分:1)
您可以通过WMI跟踪命令窗口,然后终止该过程。像这样:
function closeCMD () {
var wmiLocator = new ActiveXObject('WbemScripting.SWbemLocator'),
wmiService = wmiLocator.ConnectServer('.', 'root\\CIMV2'),
cmdWindows = new Enumerator(wmiService.ExecQuery("Select * from Win32_Process Where name = 'cmd.exe'"));
while (!cmdWindows.atEnd()) {
if (cmdWindows.item().CommandLine.indexOf('trace.txt') > -1) { // *
cmdWindows.item().Terminate(0);
}
cmdWindows.moveNext();
}
return;
}
* = trace.txt
,或原始命令行调用的任何内容(在传递给Run
的第一个参数中传递给cmd.exe的字符串的参数部分)都可以唯一地标识特定的您要关闭的cmd窗口。
如果要关闭所有cmd窗口,则可以从循环中删除条件,只需执行cmdWindows.item().Terminate(0);
。
重要!
在调用该函数之前,您必须将cmd调用设置为同步,以便在完成其工作之前不会关闭该窗口。可以通过将Run
的第三个参数更改为true
(即您当前作为false
传递的参数)来实现。
您还可以轻松地将函数更通用地更改,只需将进程名称和标识符作为参数传递,并使用进程参数构建WMI查询字符串,并将indentifier参数传递给indexOf
。