Google Apps Script批量复制文件至子文件夹报错TypeError问题解决
TypeError: folders.hasNext is not a function(Google Apps Script批量复制文件到子文件夹问题解决)
执行批量复制文件到子文件夹的Google Apps Script时触发错误:
TypeError : folders.hasNext is not a function
错误代码示例
function File_uploader() { const file = "FILE ID" const parent_folder = "PARENT FOLDER ID" // Get all subfolders inside my parent folder var folders = DriveApp.getFolderById(parent_folder) //iterates through subfolders and pastes my file in them while (folders.hasNext()){ folders.next() file.makeCopy } }
错误原因分析
- 获取子文件夹方式错误:
DriveApp.getFolderById(parent_folder)返回的是单个Folder对象,而非可遍历的FolderIterator,因此没有hasNext()方法。 - 方法调用语法错误:排查时发现调用
folder.getFolders(不带括号)时,实际是引用方法本身而非执行方法,Logger输出function () { [nativecode] }——这说明你拿到的是方法定义,不是方法执行后的迭代器结果,自然无法调用hasNext()。
修正后的完整代码
function File_uploader() { const fileId = "FILE ID"; const parentFolderId = "PARENT FOLDER ID"; // 将文件ID转换为可操作的File对象 const targetFile = DriveApp.getFileById(fileId); // 获取父文件夹下的子文件夹迭代器(必须带括号调用getFolders()) const subfolders = DriveApp.getFolderById(parentFolderId).getFolders(); // 遍历所有子文件夹并复制文件 while (subfolders.hasNext()) { const currentFolder = subfolders.next(); // 将文件复制到当前子文件夹中 targetFile.makeCopy(currentFolder); } }
关键修正点
- 必须通过
getFolders()(带括号)调用方法,才能返回FolderIterator,支持hasNext()和next()遍历操作。 - 原代码中
file只是字符串ID,需要用DriveApp.getFileById()转换为File对象,才能调用makeCopy()方法。 makeCopy()需要传入目标文件夹参数,否则文件会默认复制到Drive根目录。
内容的提问来源于stack exchange,提问作者Pierre Herenguel
相关产品推荐
相关产品推荐

