使用谷歌脚本在Google云端硬盘中的文件夹中按名称搜索文件

时间:2016-02-26 21:22:38

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

在Google云端硬盘中,我尝试在当前目录中搜索文件。该脚本链接到电子表格,因此它找到电子表格的父目录,然后使用其ID在文件夹中为名为Title的文件指定搜索。

我到目前为止的代码是:

function searchFolder(){

//get current folder id
var ss = SpreadsheetApp.getActive(); //current spreadsheet
var directParents = DriveApp.getFileById(ss.getId()).getParents();

while( directParents.hasNext() ) {
  var folder = directParents.next();
  var folderId = folder.getId();
  Logger.log(folder.getName() + " has id " + folderId);
}

//get files in folder
var parent = DriveApp.getFolderById(folderId); // folder Id
var search = 'name contains "Title"';
var specificFolder = parent.searchFiles(search);

while (specificFolder.hasNext()) {
  var file = specificFolder.next();
  Logger.log(file.getName());
  Logger.log(file.getId());
}
}

我收到错误"无效的参数:查询"在while循环的开头,这表明没有找到任何文件。

此错误似乎仅在我按名称搜索时才会发生。如果我将搜索变量更改为' fullText包含" hello"' (文件标题中有' hello'其中)没有问题。如何通过名称进行搜索?

要复制错误,请在google驱动器上的文件夹中制作两个电子表格。一个电子表格将脚本链接到另一个电子表格,另一个电子表格命名为"标题"并正在搜索。感谢。

1 个答案:

答案 0 :(得分:7)

正如Srikanth指出的那样,title contains不是name contains。代码可以更简单,请尝试以下代码。您不需要使用spreadhseet,只需使用简单的Google Apps脚本项目文件即可。右键单击Drive --->的空白区域More ---> Google Apps Script

function SearchFiles() {
  //Please enter your search term in the place of Letter
  var searchFor ='title contains "Letter"';
  var names =[];
  var fileIds=[];
  var files = DriveApp.searchFiles(searchFor);
  while (files.hasNext()) {
    var file = files.next();
    var fileId = file.getId();// To get FileId of the file
    fileIds.push(fileId);
    var name = file.getName();
    names.push(name);

  }

  for (var i=0;i<names.length;i++){
    Logger.log(names[i]);
    Logger.log("https://drive.google.com/uc?export=download&id=" + fileIds[i]);

  }

}

另请查看以下链接:

1)Search all documents in a folder 2)Search Drive Files