用js编写一个收集图片并根据名单定时自动查漏脚本

纯JS编写一个收集截图并根据名单定时自动查漏

缘由

世上没有无缘无故的爱,也没有无缘无故的恨,更无没有需求就存在的代码。去年一位助理同事跑路了,在新的助理还没入职之前,领导一声令下让俺继承了他的对象,啊~他的工作。每天收集员工健康码就是中的一项工作。
每天收集的人数在50人左右,使用的是网盘收集的方式,每个人按照格式命名好图片上传,这边就能直接后台同步下载到本地。
那么问(xu)题(qiu )就来了,收集的时候必然要检查缺漏,从文件数上只能看出缺了(即使文件数对了也可能是重复上传导致的),一个一个的对照既费时又费眼😪。
这时候就要搬出那条著名的Atwood’s Law,阿特伍德定律了。

Any application that can be written in JavaScript, will eventually be written in JavaScript。

思路

JS脚本要实现的功能:根据名单检查文件夹中未上传图片的人员名单

获取文件夹中每个图片的命名
匹配
人员名单

很简单的逻辑

利用NodeJs 之 fs文件系统实现

fs文件系统是Nodejs提供的一组类似UNIX(POSIX)标准的文件操作API。
在这里,我们主要用到的是fs文件系统中读取文件目录的功能。

// 创建方式文件系统实例
var fs = require("fs")

这里需要注意的是fs文件在node环境中不需要另外引入,直接require即可
接着确定人员名单、图片所在文件目录路径

// 创建匹配人员数组
let nameList = ['林一', '王二', '张三', '李四', '刘五', '钱六']
// 设置搜索文件夹路径
var filePath = ""

前面一些变量确定后,开始对图片文件夹进行扫描,获取文件夹中每个文件的信息,与人员名单匹配
在这里插入图片描述

// 扫描文件夹
function scan(path) {
	let noName = "" //缺失的人员名
	let arrFileName = "" // 文件名
	//读取文件目录内容
	fs.readdir(path, function(err, files) {
		if(err) {
			console.log("err:\n" + err);
			return;
		}
		// 获取文件状态信息,读出所有的文件名
		files.forEach(function (files) {
			arrFileName += file + ","
		};

在这里插入图片描述
将获取到的arrFileName,与nameList进行匹配得到缺漏的名单

// 遍历nameList人员名单,indexOf字符串方法检测每个名字是否在文件名字符串集合中
        nameList.forEach(name => {
            if (arrFileName.indexOf(name) === -1) {
                noName += ',' + name
            }
        })

在这里插入图片描述
noName第一位是空需要把它去掉,获取到完整的缺漏人员名单了

// 截取从第二位开始的子字符串
        let result = noName.substr(1)
        //result 钱六

最后执行nodemon sacn.js或node scan.js,运行j脚本文件

附录 完整代码

完整实例代码

// sacn.js
// 创建fs文件系统实例
var fs = require('fs')
// 创建匹配人员数组
let nameList = ['林一', '王二', '张三', '李四', '刘五', '钱六']
// 设置搜索文件夹文件路径
var FilePath = 'D:/上传图片';
// 没上传名单

// 扫描文件夹方法
function scan(path) {
    let noName = ''
    let arrFileName = ''
    // 读取文件目录内容
    fs.readdir(path, function (err, files) {
        if (err) {
            console.log('error:\n' + err);
            return;
        }
        // 获取文件状态信息,读出所有的文件名
        files.forEach(function (file) {
            arrFileName += file + ','
        });
        // 遍历nameList人员名单,indexOf字符串方法检测每个名字是否在文件名字符串集合中
        nameList.forEach(name => {
            if (arrFileName.indexOf(name) === -1) {
                noName += ',' + name
            }
        })
        // 截取从第二位开始的子字符串
        let result = noName.substr(1)
        let resultLength = 0
        let date = new Date()
        if (result.length != 0) {
            resultLength = result.split(',').length
        }
        console.log(path + '\n' + '截止:' + date + '\n' + '未提交:' + result)
        console.log('未提交人数:' + resultLength + '人' + '\n')
    });

}

function again() {
    scan(FilePath)
}
again()
// 每3分钟扫描一次
setInterval(again, 180000);

在这里插入图片描述

所以说,可以用程序解决的就不要用手工嘛😏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值