You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Google Apps Script获取子文件夹ID时folder.getId()报undefined错误

问题:Google Apps Script获取子文件夹ID时出现undefined错误

我拥有一个主文件夹及若干子文件夹,希望获取每个子文件夹的名称与ID,编写了如下代码:

const ROOT_FOLDER = DriveApp.getFolderById(folderId);
const FOLDERS = ROOT_FOLDER.getFolders();
const FOLDERS_NAMES = [ROOT_FOLDER.getName()]; 

//get child folders names
while (FOLDERS.hasNext()) {
  var folder = FOLDERS.next();
  var folderName = folder.getName(); 
  FOLDERS_NAMES.push(folderName);
}
  
//get child folders IDs
const FOLDERS_IDS =  [];

while (FOLDERS.hasNext()) {
  var folder = FOLDERS.next();
  var folderID = folder.getId(); 
  FOLDERS_IDS.push(folderID);
}

其中获取子文件夹名称的while循环运行正常,但获取ID的循环中,folder.getId()出现undefined错误,不清楚错误原因,寻求技术帮助。


解决方案

错误原因

ROOT_FOLDER.getFolders()返回的是FolderIterator(文件夹迭代器),这类迭代器是单向且一次性的:一旦通过next()遍历完所有元素,迭代器就会进入“耗尽”状态,无法重新开始遍历。

你的第一个while循环已经把迭代器中的所有子文件夹都遍历完毕,第二个while循环中FOLDERS.hasNext()会直接返回false,循环体根本不会执行。如果在迭代器耗尽后强行调用next(),会导致获取不到有效的Folder对象,进而调用getId()时出现undefined错误。

修复代码

只需要遍历一次迭代器,同时收集子文件夹的名称和ID即可:

const ROOT_FOLDER = DriveApp.getFolderById(folderId);
const FOLDERS = ROOT_FOLDER.getFolders();
const FOLDERS_NAMES = [ROOT_FOLDER.getName()]; 
const FOLDERS_IDS = [ROOT_FOLDER.getId()]; // 若不需要主文件夹ID可移除这行

// 单次遍历同时收集名称与ID
while (FOLDERS.hasNext()) {
  const folder = FOLDERS.next();
  FOLDERS_NAMES.push(folder.getName());
  FOLDERS_IDS.push(folder.getId());
}

这样既避免了迭代器耗尽的问题,也提升了代码效率,不需要重复遍历文件夹列表。


内容的提问来源于stack exchange,提问作者mthgn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:57:28