這個(gè)問題可以利用autojs本身提供的腳本引擎模塊來判斷.
已知任何系統(tǒng)在相同的路徑下,不可能出現(xiàn)兩個(gè)相同的文件名,因此思路就是在腳本運(yùn)行的開始, 獲取自身的腳本文件名稱和腳本所在路徑,然后獲取所有正在運(yùn)行的腳本.并提取出所有腳本的腳本名和腳本路徑. 再利用本身的腳本名和路徑去比對(duì),如果相同的腳本名和路徑名存在數(shù)量大于1則可證明本次腳本的運(yùn)行是重復(fù)運(yùn)行的,此時(shí)結(jié)束掉腳本即可.
代碼邏輯如下:
//獲取所有正在運(yùn)行的腳本引擎對(duì)象
var allEngines = engines.all();
var strArry = [];
for (let i of allEngines) {
strArry.push(i.source);
strArry.push(i.cwd());
}
//獲取當(dāng)前腳本的執(zhí)行路徑以及腳本名稱
var name = engines.myEngine().getSource();
var path = engines.myEngine().cwd();
//判斷引擎對(duì)象中是否包含本腳本的路徑以及名稱數(shù)量 大于1
var result = statisticalFieldNumber(strArry);
var nameCounts = result[name];
var pathCounts = result[path];
if (nameCounts > 1 && pathCounts > 1) {
toast("當(dāng)前腳本正在運(yùn)行,無需重復(fù)執(zhí)行.");
exit();
}
//5秒后彈一個(gè)toast,結(jié)束運(yùn)行
setTimeout(function() {
toastLog("end");
}, 5000)
/**
* 該方法判斷出傳入的數(shù)組中所有元素相同的個(gè)數(shù),返回一個(gè)對(duì)象
* @param {arry} arr 一個(gè)數(shù)組
*/
function statisticalFieldNumber(arr) {
return arr.reduce(function (prev, next) {
prev[next] = (prev[next] + 1) || 1;
return prev;
}, {});
}
-
文件
+關(guān)注
關(guān)注
1文章
555瀏覽量
24638 -
腳本
+關(guān)注
關(guān)注
1文章
384瀏覽量
14793 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1005瀏覽量
21273
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論