Google Drive脚本修改需求:按文件名起始日期删除旧文件
修改Google Apps Script脚本:按文件名起始日期删除文件
没问题,我帮你调整脚本逻辑,核心就是从文件名里解析出起始日期,再和当前日期做对比。你的文件名格式是YYYY/MM/DD ...,刚好可以提取前10位来处理,下面是具体修改点和完整脚本:
需要修改的核心内容
- 移除原来基于文件修改时间的判断逻辑,换成解析文件名开头的日期字符串
- 将当前日期的时间部分清零(只保留年月日),避免因为时间差误删当天的文件
- 保留你原来的文件所有者校验逻辑,确保只删指定邮箱的文件
修改后的完整脚本
// 解析文件名开头的日期,判断是否早于当前日期 function getOldFileIDs() { // 获取当前日期,并且把时间部分设为00:00:00,只保留年月日 const today = new Date(); today.setHours(0, 0, 0, 0); // 替换成你的目标文件夹ID const folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXX'); const files = folder.getFiles(); const obj = []; while (files.hasNext()) { const file = files.next(); const fileName = file.getName(); // 提取文件名前10位的日期字符串(比如"2019/10/05") const dateStr = fileName.substring(0, 10); try { // 将字符串转换成Date对象,注意把/替换成-,避免解析问题 const fileDate = new Date(dateStr.replace(/\//g, '-')); // 把文件日期的时间也清零,和当前日期统一对比标准 fileDate.setHours(0, 0, 0, 0); // 如果文件日期早于当前日期,加入待删除列表 const ownerEmail = file.getOwner().getEmail(); if (fileDate < today) { obj.push({ id: file.getId(), date: fileDate, owner: ownerEmail }); } } catch (e) { // 如果文件名不符合日期格式,跳过这个文件,避免脚本报错 console.log(`跳过不符合格式的文件:${fileName},错误信息:${e.message}`); } } // 按日期倒序排序(可选,方便查看待删除的文件) obj.sort((a, b) => b.date - a.date); return obj; }; function deleteFiles() { // 替换成你要校验的所有者邮箱 const targetEmail = "XXXXXXXXXXXXXXXXX@gmail.com"; const filesToDelete = getOldFileIDs(); filesToDelete.forEach(fileInfo => { if (fileInfo.owner === targetEmail) { try { Drive.Files.remove(fileInfo.id); console.log(`已删除文件:ID=${fileInfo.id},日期=${fileInfo.date.toISOString().split('T')[0]}`); } catch (e) { console.log(`删除文件失败:ID=${fileInfo.id},错误信息:${e.message}`); } } }); };
关键细节说明
- 日期解析处理:把文件名里的
/替换成-是因为部分运行环境对YYYY/MM/DD格式的日期解析可能有问题,换成YYYY-MM-DD标准ISO格式,解析更稳定。 - 时间清零:不管文件日期的具体时间,只对比年月日,确保当天的文件不会被误删。
- 异常捕获:加入try-catch处理,避免遇到不符合格式的文件名导致脚本中断。
- 日志输出:添加了console.log,方便你在脚本编辑器的日志里查看操作情况,排查问题。
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

