对于"需求"这一说,想必大家都又不少话要唠嗑唠嗑。各种奇葩需求源源不断,就差“下海捞月,上天摘星” 了呢。这不! 来了这需求,如下:
需求: 需要通过用户点击前端按钮,执行指定系统命令然后将数据返回到前端界面
直接通过JS代码执行
通过ActiveXObject对象实现对操作系统本地命令的操作。 代码如下
<html>
<head>
</head>
<body>
<div>
<button onclick="exec()">执行命令</button>
<p id="jg"></p>
<br/>
<p id="nr"></p>
</div>
<script type="text/javascript">
function exec(){
var path = "C:\Users\Administrator\Desktop\a.txt";
var cmd = new ActiveXObject("WScript.Shell");
var cmdStr = "cmd /c adb devices| findstr device$>"+path;
//var cmdStr = "cmd /c dir /?>"+path;
//第一个参数是你要执行的程序的路径
//第二个程序是窗口的形式,0后台 1正常 2激活并最小化 3激活并且最大化.共有10个参数
//第三个参数是表示脚本是等待还是继续执行,为true,脚本就会等待调用的程序退出后再向后执行
var res=cmd.run(cmdStr,0,true);
// 执行正确则返回0 否则返回1
document.getElementById("jg").innerHTML ="执行结果为:"+res;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var content = '';
if(fso.FileExists(path)){
// 第二个参数为访问模式1为只读、2写入、8为追加
// 第三个参数指定如文件不存在则创建
var file = fso.OpenTextFile(path,1,false);
//atendofstream属性:当处于文件结尾的时候这个属性返回true.一般用循环检测是否到达文件末尾
while (!file.atendofstream){
// 按行读取
//content += file.readLine()+"
";
content = file.readAll();
}
file.close();
}
if(content==null || content==""){
document.getElementById("nr").innerHTML ="内容为:<br/>"+content;
window.alert("设备未连接");
}else{
content = content.replace(/
/g,"<br>");
document.getElementById("nr").innerHTML ="内容为:<br/>"+content;
}
fso=null;
cmd=null;
}
</script>
</body>
</html>
使用VBS代码结合JS执行
通过 VBScript 脚本且内嵌在 HTML 中执行命令
<html>
<head>
</head>
<body>
<div>
<button name="Button1">执行命令</button>
<p id="jg"></p>
<br/>
<p id="nr"></p>
</div>
<script type="text/vbscript">
' 不支持IE11以上
Sub Button1_onClick()
Dim path,objShell,fs,ts,s
path="C:\Users\Administrator\Desktop\a.txt"
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "cmd /c adb devices|findstr device$>"&path,0,true
Set fs= Createobject("Scripting.filesystemobject")
If(fs.FileExists(path)) Then
set ts = fs.OpenTextFile(path,1,false)
Do While ts.atendofstream<>true
s=ts.readall
Loop
' MsgBox "000000"&s
exec(s)
Else
MsgBox "执行失败!&res"
End If
End Sub
</script>
<script type="text/javascript">
function exec(s){
document.getElementById("jg").innerHTML ="执行结果为:";
if(s==null || s==""){
window.alert("设备未连接");
}else{
s = s.replace(/
/g,"<br>");
document.getElementById("nr").innerHTML ="内容为:<br/>"+s;
}
}
</script>
</body>
</html>
注意:以上代码只能在IE浏览器执行
参考:
VBS常用经典代码
VBS的HTML事件