如何防止脚本重复运行

描述

这个问题可以利用autojs本身提供的脚本引擎模块来判断.

已知任何系统在相同的路径下,不可能出现两个相同的文件名,因此思路就是在脚本运行的开始, 获取自身的脚本文件名称和脚本所在路径,然后获取所有正在运行的脚本.并提取出所有脚本的脚本名和脚本路径. 再利用本身的脚本名和路径去比对,如果相同的脚本名和路径名存在数量大于1则可证明本次脚本的运行是重复运行的,此时结束掉脚本即可.

代码逻辑如下:

//获取所有正在运行的脚本引擎对象
var allEngines = engines.all();
var strArry = [];
for (let i of allEngines) {
    strArry.push(i.source);
    strArry.push(i.cwd());
}


//获取当前脚本的执行路径以及脚本名称
var name = engines.myEngine().getSource();
var path = engines.myEngine().cwd();


//判断引擎对象中是否包含本脚本的路径以及名称数量 大于1
var result = statisticalFieldNumber(strArry);
var nameCounts = result[name];
var pathCounts = result[path];
if (nameCounts > 1 && pathCounts > 1) {
    toast("当前脚本正在运行,无需重复执行.");
    exit();
}


//5秒后弹一个toast,结束运行
setTimeout(function() {
    toastLog("end");
}, 5000)


/**
 * 该方法判断出传入的数组中所有元素相同的个数,返回一个对象
 * @param {arry} arr 一个数组
 */
function statisticalFieldNumber(arr) {
    return arr.reduce(function (prev, next) {
        prev[next] = (prev[next] + 1) || 1;
        return prev;
    }, {});
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分