求助:如何通过Google Apps Script实现Google Drive文件夹内容批量复制/移动并添加自定义菜单
解决方案:Google Apps Script实现文件批量复制/移动 + 自定义菜单
别担心,我来帮你一步步搞定这个需求!下面是完整的脚本和操作指南,即使你是Apps Script新手也能轻松上手。
1. 核心功能脚本
我们会写两个函数:一个负责复制文件(保留transfer文件夹里的原文件),另一个负责移动文件(原文件会从transfer文件夹移除),你可以根据需求选择使用。
// 复制transfer/math中的所有文件到每个学生的math文件夹 function copyTransferFilesToStudents() { try { // 定位目标文件夹:根目录下的students、transfer/math const studentsFolder = DriveApp.getFoldersByName("students").next(); const transferMathFolder = DriveApp.getFoldersByName("transfer").next().getFoldersByName("math").next(); // 获取transfer/math里的所有文件 const transferFiles = transferMathFolder.getFiles(); // 遍历每个学生的文件夹(kev、donald、tony) const studentFolders = studentsFolder.getFolders(); while (studentFolders.hasNext()) { const studentFolder = studentFolders.next(); // 找到当前学生的math子文件夹 const studentMathFolder = studentFolder.getFoldersByName("math").next(); // 逐个复制文件到学生的math文件夹 while (transferFiles.hasNext()) { const file = transferFiles.next(); file.makeCopy(file.getName(), studentMathFolder); console.log(`已复制文件:${file.getName()} 到 ${studentFolder.getName()}/math`); } // 重置文件迭代器(避免下一个学生遍历不到文件) transferFiles = transferMathFolder.getFiles(); } SpreadsheetApp.getUi().alert("文件复制完成!"); } catch (e) { SpreadsheetApp.getUi().alert(`操作失败:${e.message}`); } } // 移动transfer/math中的所有文件到每个学生的math文件夹(原文件会被移除) function moveTransferFilesToStudents() { try { const studentsFolder = DriveApp.getFoldersByName("students").next(); const transferMathFolder = DriveApp.getFoldersByName("transfer").next().getFoldersByName("math").next(); const transferFiles = transferMathFolder.getFiles(); const studentFolders = studentsFolder.getFolders(); while (studentFolders.hasNext()) { const studentFolder = studentFolders.next(); const studentMathFolder = studentFolder.getFoldersByName("math").next(); while (transferFiles.hasNext()) { const file = transferFiles.next(); file.moveTo(studentMathFolder); console.log(`已移动文件:${file.getName()} 到 ${studentFolder.getName()}/math`); } transferFiles = transferMathFolder.getFiles(); } SpreadsheetApp.getUi().alert("文件移动完成!"); } catch (e) { SpreadsheetApp.getUi().alert(`操作失败:${e.message}`); } }
2. 添加自定义菜单
接下来我们把脚本绑定到自定义菜单,这样你不用每次打开脚本编辑器,直接在Google文件界面就能执行操作:
// 当文件打开时自动创建自定义菜单 function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu("学生文件管理") .addItem("复制Transfer文件到学生文件夹", "copyTransferFilesToStudents") .addItem("移动Transfer文件到学生文件夹", "moveTransferFilesToStudents") .addToUi(); }
3. 部署和使用步骤
- 打开任意一个Google表格(你想添加自定义菜单的文件),点击顶部菜单栏的 扩展程序 > Apps Script,打开脚本编辑器。
- 删除默认的
function myFunction()代码,把上面的所有代码粘贴进去。 - 点击脚本编辑器顶部的保存按钮,给项目起个名字(比如“学生文件同步工具”)。
- 关闭脚本编辑器,刷新Google表格页面,你会看到顶部菜单栏多了一个学生文件管理的选项,点击它就能执行复制或移动操作了。
注意事项
- 第一次执行脚本时会触发权限请求,你需要授权脚本访问你的Google Drive,按照提示完成授权即可(这是正常的安全步骤,脚本只会访问你的Drive文件)。
- 确保文件夹名称和你描述的完全一致(比如“students”、“transfer”、“math”都是小写),否则脚本会报错。
- 移动操作会彻底移除transfer/math里的文件,不确定的话先执行复制操作测试。
内容的提问来源于stack exchange,提问作者François M
相关产品推荐
相关产品推荐

