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

如何使用Google Apps Script将谷歌云盘文件移动到同名文件夹

问题原因

你遇到的Cannot use this operation on a shared drive item错误,是因为代码里使用的DriveApp原生方法默认仅支持操作「我的云端硬盘」内的内容,涉及共享云端硬盘(Shared Drive)里的文件/文件夹时,没有配置共享盘支持参数就会触发报错。

前置检查
  • 先确认你对涉及的共享云端硬盘有「内容管理者」及以上权限,权限不足时无论怎么修改代码都无法完成移动操作
解决步骤

1. 启用Drive高级服务

在Apps Script编辑器左侧点击「服务」的+按钮,在弹出的列表中找到「Drive API」,版本选择v2,点击添加即可。

2. 使用修复后的代码

修复后的代码适配了共享盘操作逻辑,同时优化了移动文件的效率:

function sortFiles() {
  // 检索所有未删除的文件夹,包含共享盘内容
  var folders = Drive.Files.list({
    "q": "mimeType = 'application/vnd.google-apps.folder' and trashed = false",
    "fields": "items(title, id)",
    "supportsAllDrives": true,
    "includeItemsFromAllDrives": true
  });
  // 检索所有未删除的非文件夹文件,包含共享盘内容
  var files = Drive.Files.list({
    "q": "mimeType != 'application/vnd.google-apps.folder' and trashed = false",
    "fields": "items(title, id, parents)",
    "supportsAllDrives": true,
    "includeItemsFromAllDrives": true
  });

  var folderIDs = [];
  var folderNames = [];
  // 遍历所有文件夹存入数组
  folders.items.forEach(folder => {
    folderNames.push(folder.title);
    folderIDs.push(folder.id);
  });

  // 遍历所有文件匹配对应文件夹
  files.items.forEach(file => {
    for (let j = 0; j < folderNames.length; j++) {
      // 这里如果需要完全匹配文件名和文件夹名,把下方的search判断改成 folderNames[j] === file.title 即可
      if (folderNames[j].search(file.title) > -1) {
        // 直接调用Drive API移动文件,自动移除原父级
        Drive.Files.update(
          {parents: [{id: folderIDs[j]}]},
          file.id,
          null,
          {supportsAllDrives: true}
        );
        break; // 匹配到第一个符合条件的文件夹就停止,避免重复移动
      }
    }
  });
}
注意事项
  • 如果仅需要处理特定共享盘的内容,可以在检索的q参数中加入'共享盘ID' in parents,缩小检索范围,避免遍历整个云端硬盘导致运行超时
  • 如果需要处理的文件/文件夹数量超过1000,需要补充分页逻辑拉取所有数据,Drive API单次请求默认最多返回1000条结果
  • 批量操作时可以在循环中加入Utilities.sleep(100),避免触发API调用配额限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:00