首页 > 解决方案 > 根据文件和文件夹名称中的通用字符串将 Google Docs 分类到 Google Drive 文件夹中

问题描述

我有数百个 Google 文档和很多 Google 文件夹。它们在文件名中共享一个公共字符串。文档需要进入相应的文件夹,我想用一些脚本来自动化它。

我想要做的如下:

我有数百个 Google Docs 在文件名中遵循类似的模式:

SURNAME, Forename_userID_fileName

例如,

DOE, Jane_jd5678_Document3
PUBLIC, Tom_tp9123_reportTPS
SMITH, John_js1234_finaldocument

等等等等。

我在 Google Team Drive 中也有相应的文件夹,设置如下:

SURNAME, Forename (userCode) (userID) - userType

例如,

DOE, Jane (145374578) (jd5678) - AET Full Time
PUBLIC, Tom (673468714) (tp9123) - NR Full Time
SMITH, John (874512456) (js1234) - AET Part Time

文件和文件夹名称之间的通用字符串是用户 ID字符串。

目前我下载了所有的文档,然后上传拖放到每个相应的文件夹中。需要岁月!我希望有一些 Apps Script 可以让我自动执行此操作,但我真的不知道从哪里开始。有人有任何指示吗?

这个 StackOverflow 问题似乎想做我想做的事,但由于我是 Apps 脚本的初学者,我无法真正破译解决方案。

标签: google-apps-scriptgoogle-drive-apigoogle-drive-shared-drive

解决方案


这是一个使用基本 Google Apps 脚本DriveApp(与高级脚本服务版本或其他 Google Drive API 方法相反)为您指明正确方向的基本示例。想到的主要问题是如果此示例需要很长时间才能完成,脚本会超时。如果发生这种情况,您将需要更复杂的解决方案。您也可以通过idRegex唯一的工作将其分块,例如姓 AD 然后 EG 等。示例正则表达式可以匹配您拥有的带有下划线的随机文件;如果这是一个问题,您可能想找到一个更复杂的正则表达式。

function organizeFilesById() {
  var idRegex = /_[A-z]+[0-9]+_/;
  var files = DriveApp.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var filename = file.getName();
    var id = idRegex.exec(filename);
    if (! id) {
      continue;
    } else {
      id = id[0];
    }
    var query = "title contains '" + id + "'";
    var folders = DriveApp.searchFolders(query);
    if (folders.hasNext()) {
      var folder = folders.next();
      Logger.log("Will add %s to %s", filename, folder.getName());
      //folder.addFile(file); // uncomment line to actually do it
    } else {
      Logger.log("No folder found for %s", filename);
      // could create folder or just report "folder not found"
    }
  }
}

推荐阅读