在Google云端硬盘中搜索文件

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

我正在尝试编写一个脚本来搜索我的Google云端硬盘以获取文件。搜索应该只查看文件的名称(而不是内容),并查找该名称中的字符串。

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

如果这很重要,我会在文件夹的子文件夹中搜索:“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);
  }

}

搜索一无所获。

这似乎是基本的,但我找不到任何提出这个具体问题的人。

提前致谢!

google-apps-script google-api google-drive-sdk
1个回答
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'检索的文件中检索文件。

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

Modified script 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);
    }
  }
}

Reference:

如果这个修改不是你想要的结果,我道歉。

添加:

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

Modified script 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);
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.