修改Google Apps Script清空Google Drive父文件夹全部内容
问题说明
原脚本递归遍历文件夹时,仅对遍历到的文件执行了移入回收站操作,未对遍历完成的空文件夹做删除处理,因此执行后会残留所有层级的空子文件夹,无法实现父文件夹完全清空的效果。
注意:Google Drive 不允许直接删除非空文件夹,必须按「先删文件夹内所有内容,再删文件夹本身」的顺序执行操作,否则会抛出接口错误。
修改后可用脚本
function DeleteInvoices() { const clearFolderContent = folder => { // 删除当前文件夹层级下的所有文件 const files = folder.getFiles(); while (files.hasNext()) { const file = files.next(); console.log('已删除文件:', file.getName()); file.setTrashed(true); } // 递归处理所有子文件夹 const subFolders = folder.getFolders(); while (subFolders.hasNext()) { const currentSubFolder = subFolders.next(); // 先清空当前子文件夹内的全部内容 clearFolderContent(currentSubFolder); // 子文件夹清空后,将子文件夹本身移入回收站 console.log('已删除子文件夹:', currentSubFolder.getName()); currentSubFolder.setTrashed(true); } } // 传入目标文件夹ID,脚本仅清空文件夹内内容,保留父文件夹本身 const targetFolder = DriveApp.getFolderById("1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e"); clearFolderContent(targetFolder); }
核心修改点
- 调整递归执行顺序:先处理子文件夹内部的所有文件、嵌套文件夹,待子文件夹变为空状态后再执行删除操作,避免接口报错
- 新增子文件夹删除逻辑:在子文件夹递归处理完成后,调用
setTrashed(true)将空的子文件夹移入回收站 - 保留目标父文件夹:脚本不会删除你通过ID指定的最外层目标文件夹,仅清空其内部所有内容,执行完成后父文件夹为空状态
- 补充了文件夹删除的日志打印,可在Apps Script的执行日志中核对所有删除项
内容的提问来源于stack exchange,提问作者Nathan Taylor
相关产品推荐
相关产品推荐

