我正在尝试编写脚本以在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);
}
}
搜索一无所获。
这似乎很基本,但是我找不到有人问这个特定问题。
谢谢!
答案 0 :(得分:2)
ShowMeCC
字符串的文件。如果我的理解是正确的,该解决方法如何?
contains运算符仅对标题执行前缀匹配。例如,标题“ HelloWorld”将与标题包含“ Hello”但标题不包含“ World”匹配。
不幸的是,这不能使用2018-08-06_Miller_576132063_17.25.pdf
直接检索title contains '576132063'
的文件。因此,作为一种解决方法,应将其视为以下解决方法。
在这种情况下,首先需要检索所有文件。但这是高成本。为了降低成本,我想提出两步搜索。
fullText contains '576132063'
查询检索文件。
fullText contains '576132063'
可以像2018-08-06_Miller_576132063_17.25.pdf
这样搜索文件名。fullText contains '576132063'
检索的文件中检索文件。通过此流程,不需要检索所有文件。因此,成本变得低于上述方法。
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')
之类的特定文件夹中检索文件,则还可以使用以下脚本。当文件夹中的文件数量不多时,此方法的成本不会很高。
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);
}
}
}