请求:Google Apps Script批量处理Drive文件规避超时示例脚本
分段处理Google Drive大量文件的Google Apps Script实现
完整实现脚本
// 主处理函数,每次运行处理指定数量的文件 function processFilesInBatches() { const PROCESSED_COUNT_KEY = "processedCount"; const BATCH_SIZE = 5; // 每次处理的文件数量 const searchQuery = 'modifiedDate > "2023-01-01"'; // 你的搜索过滤条件 // 获取脚本属性,持久化存储已处理文件数 const scriptProps = PropertiesService.getScriptProperties(); let processedCount = Number(scriptProps.getProperty(PROCESSED_COUNT_KEY)) || 0; const files = DriveApp.searchFiles(searchQuery); let currentIndex = 0; let processedInCurrentBatch = 0; // 跳过已经处理过的文件 while (files.hasNext() && currentIndex < processedCount) { files.next(); currentIndex++; } // 处理当前批次的文件 while (files.hasNext() && processedInCurrentBatch < BATCH_SIZE) { const file = files.next(); // 替换为你的实际处理逻辑,比如设置权限、修改属性等 file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); processedInCurrentBatch++; currentIndex++; } // 更新已处理文件数的存储 scriptProps.setProperty(PROCESSED_COUNT_KEY, currentIndex); // 没有更多文件时,清理状态并终止自动触发 if (!files.hasNext()) { scriptProps.deleteProperty(PROCESSED_COUNT_KEY); deleteExistingTriggers(); console.log("所有符合条件的文件处理完成,已停止自动执行"); } } // 创建每5分钟执行一次的时间驱动触发器 function createBatchTrigger() { // 先删除已有同名触发器,避免重复执行 deleteExistingTriggers(); ScriptApp.newTrigger("processFilesInBatches") .timeBased() .everyMinutes(5) .create(); console.log("已创建自动触发器,每5分钟执行一次文件处理"); } // 删除所有指向主处理函数的触发器 function deleteExistingTriggers() { const triggers = ScriptApp.getProjectTriggers(); triggers.forEach(trigger => { if (trigger.getHandlerFunction() === "processFilesInBatches") { ScriptApp.deleteTrigger(trigger); } }); }
关键逻辑说明
- 状态持久化:利用
PropertiesService存储已处理文件的累计数量,确保每次执行都能从上次结束的位置继续,不会重复处理文件。 - 批次控制:每次运行先跳过已处理的文件,再处理最多5个(可通过
BATCH_SIZE调整)文件,严格控制单次执行的时间,避开Google Apps Script的执行时长限制。 - 自动启停:
createBatchTrigger()创建定时触发器,当所有符合条件的文件处理完成后,脚本会自动删除触发器并清理存储的状态数据。 - 自定义调整:
- 修改
BATCH_SIZE可以调整每次处理的文件数量(建议根据实际处理逻辑的耗时调整,确保单次执行不超时间限制) - 修改
searchQuery可以替换成你的目标搜索过滤条件 - 替换
file.setSharing(...)代码块为你的实际处理需求(比如修改文件名、移动文件等)
- 修改
使用步骤
- 将上述代码复制到Google Apps Script编辑器中
- 先手动运行
createBatchTrigger(),完成授权流程 - 脚本会自动每5分钟执行一次,直到所有符合条件的文件处理完毕
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

