Google Apps Script保存文件至错误Google Drive文件夹问题求助
解决Google Apps Script重名文件夹定位错误的问题
你的问题根源在于getFoldersByName()返回的是文件夹迭代器,调用.next()只会直接取迭代器中第一个匹配到的文件夹——如果父目录下有多个同名子文件夹,这个逻辑根本无法保证定位到你真正需要的那个。
最优解决方案:用文件夹ID直接定位
如果能获取到目标文件夹的ID,直接用DriveApp.getFolderById()是最可靠的方式,完全规避重名问题:
var targetFdr = DriveApp.getFolderById("目标文件夹的ID"); // 后续直接用targetFdr保存文件即可
必须用名称定位时的筛选方案
如果没办法提前拿到ID,只能通过名称区分,你需要遍历所有同名文件夹,根据额外条件(比如创建时间、内部文件特征)筛选出目标文件夹:
示例1:取最新创建的同名文件夹
var par_fdr = DriveApp.getFolderById("123456789A"); // 替换为父文件夹ID var fdr_name = "child_fdr"; var targetFdr = null; var folders = par_fdr.getFoldersByName(fdr_name); var latestCreateTime = new Date(0); // 初始化为最早时间戳 // 遍历所有同名文件夹,记录最新创建的那个 while (folders.hasNext()) { var currentFdr = folders.next(); var createTime = currentFdr.getDateCreated(); if (createTime > latestCreateTime) { latestCreateTime = createTime; targetFdr = currentFdr; } } // 没找到则创建新文件夹 if (!targetFdr) { targetFdr = par_fdr.createFolder(fdr_name); } // 后续用targetFdr执行文件保存操作
示例2:通过内部标记文件区分
可以给目标文件夹添加一个唯一的标记文件,遍历的时候通过这个文件识别目标:
var par_fdr = DriveApp.getFolderById("123456789A"); var fdr_name = "child_fdr"; var markerFileName = "target_folder_marker.txt"; // 自定义标记文件名 var targetFdr = null; var folders = par_fdr.getFoldersByName(fdr_name); while (folders.hasNext()) { var currentFdr = folders.next(); // 检查当前文件夹是否包含标记文件 if (currentFdr.getFilesByName(markerFileName).hasNext()) { targetFdr = currentFdr; break; } } // 没找到则创建新文件夹,同时生成标记文件 if (!targetFdr) { targetFdr = par_fdr.createFolder(fdr_name); targetFdr.createFile(markerFileName, "这是目标文件夹的标记文件"); }
原来的脚本之所以出错,是因为.next()只会返回第一个匹配的文件夹,完全不考虑你实际需要的是哪一个——只要父目录下有多个同名文件夹,这个逻辑必然会出现定位错误。
内容的提问来源于stack exchange,提问作者Wilfredo Cendana
相关产品推荐
相关产品推荐

