如何正确同时使用searchFile和searchFolder? -应用脚本

时间:2018-11-12 19:07:16

标签: javascript google-apps-script google-sheets

下一个脚本的作用是从特定文件夹开始搜索驱动器中具有特定名称的所有电子表格。

function searchSSH(folder, path) { 
  if (folder == null && path == null) {
  return 
  searchSSH(DriveApp.getFolderById("ID"), "");
  }

  var files = [];

  path = path + "/" + folder.getName();  
  var searchFile = "fullText contains 'Project <>' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
  var fileIterate = folder.searchFiles(searchFile);

  while ( fileIterate.hasNext() ) {
    var file = fileIterate.next();
    var fileId = file.getId();
    var name = file.getName();
    files.push(name);

  for (var i=0; i<files.length; i++){
    Logger.log(files[i]);
  } 
 }

  var folderIterate = folder.getFolders();
  while(folderIterate.hasNext()) {
    var searchFold = searchSSH(folderIterate.next(), path);
    for (var i = 0; i < searchFold.length; i++) {
    files.push(searchFold[i]);
    }     
  }
  return files;    
 }

我想做的是看如何做到这一点,以便像searchFile一样寻找特定的文件夹,而我尝试这样做...

    function searchSSH() {         
      var Folder =  DriveApp.getFolderById("ID");

      var folders = Folder.searchFolders('fullText contains "project"');
      while (folders.hasNext()) {
        var folder1 = folders.next();
        Logger.log(folder1.getName());
        for (var i = 0; i < folder1.length; i++) {
          files.push(folder1[i]);
        }     
      }

      var files = [];
      var searchFile = "fullText contains 'test <>' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
      var fileIterate = Folder.searchFiles(searchFile);

      while ( fileIterate.hasNext() ) {
        var file = fileIterate.next();
        var fileId = file.getId();
        var name = file.getName();
        files.push(name);

        for (var i=0; i<files.length; i++){
          Logger.log(files[i]);
        } 
      }       
      return files;    
    }

但是不起作用。我想做的是遍历所有文件夹,直到找到名称为project的文件夹,并继续在该文件夹中进行迭代,直到找到所有名称为test的电子表格,但仅进行搜索在第一个文件夹中。

1 个答案:

答案 0 :(得分:1)

  
      
  1. 我尝试在文件夹之间进行迭代,直到找到名称为Project的文件夹为止,并且在该文件夹内继续进行迭代,直到找到名称为Test且类型为电子表格的文件为止。
  2.   
  3. 第一个脚本(如果它找到了文件),但我想指定我在文件夹中查找名称为Project的脚本,以提高脚本的性能
  4.   
  5. 我正在尝试的第二个脚本没有进行迭代,因此它不起作用,因为当我运行它时,它只找到第一个文件夹,而不在其他文件夹中搜索,谢谢您的帮助。我希望现在它已经让我了解了
  6.   

从您的答复中,我可以理解如下。

  • 您要在名为Test的文件夹下检索文件名为Project的电子表格。您想以较低的处理成本来做到这一点。

如果我的理解是正确的,那么这些示例脚本又如何呢?请根据您的情况从中选择。我认为您的情况有几个答案。因此,请将此答案视为其中之一。

模式1:

流量:

  1. 使用TestgetFilesByName()的文件名中检索文件。
  2. 使用getParents()检索每个文件的父文件夹。
  3. 如果文件夹名称为Project,且mimeType为Spreadsheet,则它将检索文件。

示例脚本:

var fileName = "Test";
var folderName = "Project";
var files = DriveApp.getFilesByName(fileName);
while (files.hasNext()) {
  var file = files.next();
  var parents = file.getParents();
  while (parents.hasNext()) {
    var parent = parents.next();
    if (file.getMimeType() == MimeType.GOOGLE_SHEETS && parent.getName() == folderName) {

      // do something

    }
  }
}

模式2:

流量:

  1. 使用ProjectgetFoldersByName()的文件夹名称中检索文件夹。
  2. 使用getFilesByName()检索每个文件夹中的文件。
  3. 如果文件名是Test,而mimeType是Spreadsheet,则它将检索文件。

示例脚本:

var fileName = "Test";
var folderName = "Project";
var folders = DriveApp.getFoldersByName(folderName);
while (folders.hasNext()) {
  var folder = folders.next();
  var files = folder.getFilesByName(fileName);
  while (files.hasNext()) {
    var file = files.next();
    if (file.getMimeType() == MimeType.GOOGLE_SHEETS && file.getName() == fileName) {

      // do something

    }
  }
}

模式3:

流量:

  1. 使用Project检索文件夹名称getFoldersByName()的文件夹ID。
  2. 使用Project检索具有父文件夹Test和文件名searchFiles()以及Spreadsheet的mimeType的文件。

示例脚本:

var fileName = "Test";
var folderName = "Project";
var folders = DriveApp.getFoldersByName(folderName);
var folderIds = [];
while (folders.hasNext()) {
  folderIds.push(folders.next().getId());
}
folderIds.forEach(function(id) {
  var params = "'" + id + "' in parents and title='" + fileName + "' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
  var files = DriveApp.searchFiles(params);
  while (files.hasNext()) {
    var file = files.next();

      // do something

  }
});

参考文献:

如果这些不是您想要的,对不起。