列出谷歌驱动器中的所有文件和文件夹

Dan*_*Cue 4 google-apps-script

我一直试图弄清楚这一点。我希望我能在这方面得到一些指导。以下脚本的目的是获取包含子文件夹及其文件的文件夹和文件的完整列表。

这是我目前拥有的:

  var counter = 0

  var files = folder.getFiles();  
  var subfolders = folder.getFolders();
  var folderPath = folder.getName();

  while (subfolders.hasNext()){   
    subfolder = subfolders.next(); 
    var row = [];
    //row.push(subfolder.getName(),'',subfolder.getId(),subfolder.getUrl(),subfolder.getSize(),subfolder.getDateCreated(),subfolder.getLastUpdated());
    //list.push(row); 
    if(counter > 0){
      var files = subfolder.getFiles();
    }

    while (files.hasNext()){
      file = files.next();
      var vals = file.getUrl();
      var row = [];
      if(counter == 0){
        row.push(folder.getName(),file.getName(),file.getId(),file.getUrl(),file.getSize(),file.getDateCreated(),file.getLastUpdated())
      }else{
        row.push(folderPath + '/' + subfolder.getName(),file.getName(),file.getId(),file.getUrl(),file.getSize(),file.getDateCreated(),file.getLastUpdated())        
      }
      list.push(row);    
    }
    counter = counter + 1
  }
Run Code Online (Sandbox Code Playgroud)

它当前获取当前文件夹及其子文件夹的文件夹名称和文件名。没有比这更进一步的了。我一直在想办法让循环继续下去,直到没有更多的子文件夹。

这不是一个很大的驱动器。有不到 10 个级别,但如果需要,希望能够灵活地进一步发展。

Chr*_*ris 8

在这种情况下,递归是有益的。下面的代码调用递归方法recurseFolder(),该方法以 Folder 和 Array 作为参数。它将文件夹中的所有文件添加到一个列表中,然后在它找到的任何子文件夹上调用自己。

function test(){
  var root = DriveApp.getRootFolder();
  var list = [];

  var list = recurseFolder(root, list);
  Logger.log(JSON.stringify(list));

  //This is just how I am testing the outputed list. You can do what you need.
  var sheet = SpreadsheetApp.getActiveSheet();
  list.forEach(function (row){
   sheet.appendRow(row); 
  });
}

function recurseFolder(folder, list){
  var files = folder.getFiles();  
  var subfolders = folder.getFolders();

  while (files.hasNext()){ //add all the files to our list first.
    var file = files.next();
    var row = [];
    Logger.log("File: " + folder.getName());
    row.push(folder.getName(),file.getName(),file.getId(),file.getUrl(),file.getSize(),file.getDateCreated(),file.getLastUpdated())
    list.push(row);
  }


  while (subfolders.hasNext()){   //Recurse through child folders.
    subfolder = subfolders.next(); 
    Logger.log("Folder: " + subfolder.getName());
    list = recurseFolder(subfolder, list); //Past the original list in so it stays a 2D Array suitible for inserting into a range.
  }

  return list;
}
Run Code Online (Sandbox Code Playgroud)

我不确定输出的格式是否符合您的预期,因此您可能需要稍微尝试一下。注意:如果在更大的驱动器上运行,它很容易超时。