请求优化Google Drive文件删除脚本:保留最新7个文件并完善邮件通知
优化后的Google Apps Script脚本:按保留最新7个文件规则清理Drive文件夹
以下是满足你需求的优化脚本,核心逻辑改为每个目标文件夹强制保留最新7个文件,同时完善了无文件删除时的邮件通知机制:
function DeleteOldFiles() { // 目标文件夹ID列表,按需修改 const folderIds = [ '1YS60U0Cts******I2Lqxb6-_TS0LMho1', // Calllogs '1Vofy1iPjV******yFc11Nhmr6DnHM736', // Messages '1iP-TAOAH_******6jvIuN6Pnln2w6R3g', // Contacts '1kDCzGFu9d******v33PXklT7ds5B6G11' // Calendars ]; let deleteCount = 0; let logContent = ''; // 遍历每个目标文件夹 for (const folderId of folderIds) { const folder = DriveApp.getFolderById(folderId); const folderName = folder.getName(); logContent += `=== 处理文件夹: ${folderName} ===\n`; // 获取文件夹内所有文件,存入数组以便排序 const files = []; const fileIterator = folder.getFiles(); while (fileIterator.hasNext()) { files.push(fileIterator.next()); } // 按文件最后更新时间倒序排序(最新的在前) files.sort((a, b) => b.getLastUpdated() - a.getLastUpdated()); // 如果文件数量超过7,删除第8个及以后的文件 if (files.length > 7) { const filesToDelete = files.slice(7); filesToDelete.forEach(file => { file.setTrashed(true); // 移入回收站,如需永久删除可替换为Drive.Files.remove(file.getId()) logContent += `已删除文件: ${file.getName()}\n`; deleteCount++; }); } else { logContent += `文件数量(${files.length})未超过7,无需删除\n`; } } // 发送邮件通知 const recipientEmail = '你的邮箱地址'; // 替换为实际收件邮箱 if (deleteCount > 0) { MailApp.sendEmail( recipientEmail, 'Drive文件夹清理完成:已删除旧文件', logContent ); } else { MailApp.sendEmail( recipientEmail, 'Drive文件夹清理通知:无文件被删除', '本次清理操作未删除任何文件,所有目标文件夹的文件数量均≤7个' ); } }
关键优化说明
保留最新7个文件逻辑:
- 将文件夹内所有文件存入数组,避免迭代器无法重复访问的问题
- 按
getLastUpdated()时间倒序排序,确保最新文件排在数组前7位 - 使用
slice(7)获取第8个及以后的旧文件,批量移入回收站(如需永久删除,可注释掉file.setTrashed(true),启用Drive.Files.remove(file.getId()),注意需提前在脚本编辑器中启用Drive API)
邮件通知优化:
- 新增
deleteCount变量统计删除文件总数,精准判断是否有操作执行 - 无文件删除时,发送明确的告知邮件,避免原逻辑中无日志时不发邮件的问题
- 日志内容更结构化,方便查看每个文件夹的处理结果
- 新增
使用注意事项
- 替换脚本中的
folderIds列表为你的实际文件夹ID - 替换
recipientEmail为接收通知的邮箱地址 - 如需永久删除文件,需在脚本编辑器的「服务」中启用Drive API(步骤:编辑器顶部→资源→高级Google服务→找到Drive API并启用)
内容的提问来源于stack exchange,提问作者Alan-53
相关产品推荐
相关产品推荐

