在Google云端硬盘中搜索文件

时间:2019-02-21 03:15:17

标签: google-apps-script google-api google-drive-api

我正在尝试编写脚本以在Google云端硬盘中搜索文件。搜索仅应查看文件名(而不是目录名),并在该名称中查找字符串。

例如,有一个名为“ 2018-08-06_Miller_576132063_17.25.pdf”的文件,我想让我的脚本搜索“ 576132063”并获取文件ID。

如果有关系,我将在文件夹“ 0B1-kfT4ZOAitb1lZSzM5YXR6czA”的子文件夹中搜索

function FileFinder() {

  var ShowMeCC = '576132063';
  var files = DriveApp.getFolderById('0B1-kfT4ZOAitb1lZSzM5YXR6czA').searchFiles('title contains  "' + ShowMeCC + '" ');
  while (files.hasNext()) {
    var file = files.next();
    var fnaMe = file.getName();
    var fID = file.getId();
    Logger.log(fID);
  }

}

搜索一无所获。

这似乎很基本,但是我找不到有人问这个特定问题。

谢谢!

1 个答案:

答案 0 :(得分:2)

  • 您要检索的文件名包含ShowMeCC字符串的文件。

如果我的理解是正确的,该解决方法如何?

The official document如下。

  

contains运算符仅对标题执行前缀匹配。例如,标题“ HelloWorld”将与标题包含“ Hello”但标题不包含“ World”匹配。

不幸的是,这不能使用2018-08-06_Miller_576132063_17.25.pdf直接检索title contains '576132063'的文件。因此,作为一种解决方法,应将其视为以下解决方法。

  • 检索所有文件后搜索文件。

在这种情况下,首先需要检索所有文件。但这是高成本。为了降低成本,我想提出两步搜索。

  1. 使用fullText contains '576132063'查询检索文件。
    • fullText contains '576132063'可以像2018-08-06_Miller_576132063_17.25.pdf这样搜索文件名。
  2. fullText contains '576132063'检索的文件中检索文件。

通过此流程,不需要检索所有文件。因此,成本变得低于上述方法。

修改后的脚本1:

function FileFinder() {
  var ShowMeCC = '576132063';
  var files = DriveApp.searchFiles('fullText contains "' + ShowMeCC + '"'); // Modified
  // OR var files = DriveApp.getFolderById('0B1-kfT4ZOAitb1lZSzM5YXR6czA').searchFiles('fullText contains "' + ShowMeCC + '"'); // Modified
  while (files.hasNext()) {
    var file = files.next();
    var fnaMe = file.getName();
    if (fnaMe.indexOf(ShowMeCC) > -1) { // Added
      var fID = file.getId();
      Logger.log(fnaMe);
      Logger.log(fID);
    }
  }
}

参考:

如果此修改不是您想要的结果,我深表歉意。

已添加:

作为另一个示例,如果要从诸如DriveApp.getFolderById('0B1-kfT4ZOAitb1lZSzM5YXR6czA')之类的特定文件夹中检索文件,则还可以使用以下脚本。当文件夹中的文件数量不多时,此方法的成本不会很高。

修改后的脚本2:

function FileFinderaaa() {
  var ShowMeCC = '576132063';
  var files = DriveApp.getFolderById('0B1-kfT4ZOAitb1lZSzM5YXR6czA').getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var fnaMe = file.getName();
    if (fnaMe.indexOf(ShowMeCC) > -1) {
      var fID = file.getId();
      Logger.log(fnaMe);
      Logger.log(fID);
    }
  }
}