根据文件和文件夹名称中的常用字符串将Google文档排序到Google云端硬盘文件夹中

问题描述 投票:0回答:1

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

我想做的是如下:

我有数百个Google文档,它们遵循文件名中的类似模式:

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

文件和文件夹名称之间的公共字符串是userID字符串。

目前我下载了所有文档,然后上传拖放到每个相应的文件夹中。需要很长时间!我希望有一些应用程序脚本可以自动完成,但我真的不知道从哪里开始。任何人有任何指针?

This StackOverflow question似乎想要做我想做的事情,但由于我是Apps Script的初学者,我无法真正破译解决方案。

google-apps-script google-drive-sdk google-drive-team-drive
1个回答
0
投票

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

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"
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.