如何配置含ContinuationToken的递归文件夹迭代器脚本?
解决Google Drive脚本遍历文件夹并输出到Sheets的问题
完整可运行脚本
替换关键参数后直接运行即可:
// 配置参数:替换成你的目标文件夹ID和工作表名称 const TARGET_FOLDER_ID = "你的文件夹ID"; const TARGET_SHEET_NAME = "指定标签页名称"; function listFoldersToSheet() { const folder = DriveApp.getFolderById(TARGET_FOLDER_ID); const results = []; // 递归遍历文件夹,收集URL和完整路径 function traverseFolder(currentFolder, parentPath) { const currentPath = parentPath ? `${parentPath}/${currentFolder.getName()}` : currentFolder.getName(); // 添加当前文件夹信息:URL、完整路径 results.push([ `https://drive.google.com/drive/folders/${currentFolder.getId()}`, currentPath ]); // 遍历子文件夹(跳过文件) const subFolders = currentFolder.getFolders(); while (subFolders.hasNext()) { traverseFolder(subFolders.next(), currentPath); } } // 开始遍历根目标文件夹 traverseFolder(folder, ""); // 将结果写入指定工作表 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(TARGET_SHEET_NAME); if (!sheet) { throw new Error(`未找到名为${TARGET_SHEET_NAME}的工作表`); } // 清空现有数据(可选,根据需求调整) sheet.clearContents(); // 写入表头和数据 sheet.appendRow(["文件夹URL", "完整路径"]); sheet.getRange(2, 1, results.length, 2).setValues(results); SpreadsheetApp.getUi().alert("遍历完成,数据已写入表格"); }
关键配置步骤
- 指定目标文件夹:把
TARGET_FOLDER_ID的值换成你要搜索的文件夹ID(文件夹URL里folders/后面的字符串) - 指定输出工作表:把
TARGET_SHEET_NAME换成绑定表格里的目标标签页名称,比如"文件夹列表" - 忽略文件:脚本里只调用
getFolders()获取子文件夹,完全跳过文件,大幅提升运行速度
运行前检查
- 打开你的Google Sheets,点击「工具」>「脚本编辑器」,把上面的代码粘贴进去
- 替换配置参数后,点击运行按钮(▶️),第一次运行会触发授权流程,需要你允许脚本访问Google Drive和Sheets的权限
- 授权完成后,脚本会自动遍历目标文件夹下的所有子文件夹,并把结果写入指定工作表
关于迭代器续传Token的说明
你之前纠结的fileIteratorContinuationToken和folderIteratorContinuationToken是处理大量文件/文件夹时的分页续传机制,但对于普通规模的文件夹遍历,用上面的递归方式完全足够,不需要手动管理token。如果你的文件夹数量超过1000个,Google的getFolders()迭代器会自动处理分页,递归函数会自然遍历所有子文件夹,无需额外操作。
内容的提问来源于stack exchange,提问作者Jeffery Price
相关产品推荐
相关产品推荐

