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

求助:如何通过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. 部署和使用步骤

  1. 打开任意一个Google表格(你想添加自定义菜单的文件),点击顶部菜单栏的 扩展程序 > Apps Script,打开脚本编辑器。
  2. 删除默认的function myFunction()代码,把上面的所有代码粘贴进去。
  3. 点击脚本编辑器顶部的保存按钮,给项目起个名字(比如“学生文件同步工具”)。
  4. 关闭脚本编辑器,刷新Google表格页面,你会看到顶部菜单栏多了一个学生文件管理的选项,点击它就能执行复制或移动操作了。

注意事项

  • 第一次执行脚本时会触发权限请求,你需要授权脚本访问你的Google Drive,按照提示完成授权即可(这是正常的安全步骤,脚本只会访问你的Drive文件)。
  • 确保文件夹名称和你描述的完全一致(比如“students”、“transfer”、“math”都是小写),否则脚本会报错。
  • 移动操作会彻底移除transfer/math里的文件,不确定的话先执行复制操作测试。

内容的提问来源于stack exchange,提问作者François M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:22:38