通过Google云端硬盘中的文件夹/子文件夹/文件进行迭代

时间:2014-08-05 17:44:17

标签: google-apps-script

我的Google Drive结构设置如下:

Client A
--Project 1
----Drafts
----Presentations
----Minutes
--Project 2
----Drafts
----Presentations
----Minutes
Client B
<and so on>

我想编写一个脚本,我可以在其中传递Project 1的ID,它将循环遍历三个子文件夹中的每一个并计算文件总数(最终我想计算更新的文件数量)日期范围,但婴儿步骤!)。

我尝试过使用Class FolderIterator代码,但是您希望将一组文件夹分配给变量&#34;文件夹&#34; (它显示var folders = DriveApp.getFolders();,我尝试了var folders = DriveApp.getFolderById("<id of Project 1 here>");,但在我的版本中只有一个文件夹,而且它确实需要文件夹的集合。如果我有父文件夹的ID,有没有办法将这三个子文件夹分配给folders变量?或者有更好的方法循环子文件夹吗?

2 个答案:

答案 0 :(得分:2)

作为Bryan回答(thx,我upvoted )的补充,我编写了一个测试函数来查看记录器中的结果并使用适当的参数运行该函数来计算你的数量想要的。

(由于主要部分来自Bryan P,因此不应选择此答案作为正确答案)

这是怎么回事:

    function testTraverse(){
      var originFolder = DriveApp.getFoldersByName('Client A').next(); // use the folder name you want here
      var totalCount = traverseFolder(originFolder,0);
      Logger.log('total files = '+totalCount);// note that if some files are
      // in more than one subfolder the count will count every occurrence of 
      //this file so the total might be > to the sum of intermediate values
    }

    function traverseFolder(folder,total) {
      var name = folder.getName();
      var count = 0;
      var files = folder.getFiles();

      while (files.hasNext()) {
        count++; 
      Logger.log('fileName ('+count+') in '+name+' is : '+files.next().getName());

      }
      Logger.log('\n'+name+' has ' + count+' files\n----------------------\n' );
      var subs = folder.getFolders();
      while (subs.hasNext()) {
        total+=traverseFolder(subs.next(),count);
      }
      return total;
    }

注意,此代码适用于合理的&#34;文件数量,如果您有许多文件和文件夹,则可能超过5分钟的执行时间限制。在这种情况下,您需要修改它,以便使用方法提供的令牌继续处理较小的文件串。

答案 1 :(得分:1)

使用DriveApp可能看起来像这样......

function traverseFolder(folder) {
  var name = folder.getName();

  if ( /^(Drafts|Presentations|Minutes)$/.test(name) ) { 
    var count = 0;
    var files = folder.getFiles();

    while ( files.hasNext() ) {
      count++; 
    }
    Logger.log(name + ' : ' + count);
  }
  var subs = folder.getFolders();

  while (subs.hasNext()) {
    traverseFolder(subs.next());
  }
}

我们现在也可以访问Advanced Drive Service。也许我会看一个例子,如果有人不会很快发布一个。