Google Drive脚本问题:无法检测层级文件夹存在,重复创建如何修复?
问题分析与解决方案
原代码存在两个核心问题:
- 错误地从当前表格的祖父级文件夹(
pastavideo)中查找目标文件夹,而非在传入的parentFolder下检测Video及子文件夹的存在性 - 未分步检测
Video文件夹和目标子文件夹的存在,直接在子文件夹不存在时重复创建整个层级,导致重复生成文件夹
修正后的代码
function createOrGetFolder(folderName, parentFolderId) { try { // 1. 获取传入的父文件夹,验证存在性 const parentFolder = DriveApp.getFolderById(parentFolderId); if (!parentFolder) { throw new Error(`Parent Folder with id: ${parentFolderId} not found`); } // 2. 检查并获取Video文件夹 let videoFolder; const videoFolders = parentFolder.getFoldersByName("Video"); if (videoFolders.hasNext()) { videoFolder = videoFolders.next(); } else { videoFolder = parentFolder.createFolder("Video"); } // 3. 检查并获取目标子文件夹(01-01) let targetFolder; const targetFolders = videoFolder.getFoldersByName(folderName); if (targetFolders.hasNext()) { targetFolder = targetFolders.next(); } else { targetFolder = videoFolder.createFolder(folderName); } return targetFolder.getId(); } catch (error) { return error; } }
关键修正点
- 修正检测路径:完全基于传入的
parentFolderId对应的文件夹,而非当前表格的上级文件夹,符合预期的层级结构 - 分步检测创建:先检测
Video文件夹,不存在则创建;再在Video下检测目标子文件夹,不存在则创建,避免重复生成整个层级 - 使用参数
folderName:原代码硬编码了"01-01",现在改用函数参数,让函数支持创建任意名称的子文件夹,提升通用性 - 变量声明规范:使用
const/let声明变量,避免全局变量污染
内容的提问来源于stack exchange,提问作者Tyrone Hirt
相关产品推荐
相关产品推荐

