如何在Google云端硬盘的子文件夹中也列出文件 [英] How to list also files inside subfolders in google drive

查看:83
本文介绍了如何在Google云端硬盘的子文件夹中也列出文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找到了这个Google脚本,可以列出特定文件夹中的文件.当我尝试使用它时,它只会列出第一级文件夹中的文件,而忽略子文件夹中的文件.

I found this google script that can list files inside a specific folder. When i tried it, it would only list files on the first level folder and ignore files in subfolders.

我如何做到这一点,以便它也可以列出所有子文件夹中的所有内容.

How do i make it so it can list also everything inside all subfolders.

这是脚本

function ListNamedFilesandFolders() {
/* Adapted from Code written by @hubgit https://gist.github.com/hubgit/3755293
Updated since DocsList is deprecated  https://ctrlq.org/code/19854-list-files-in-google-drive-folder
*/


  // List all files and sub-folders in a single folder on Google Drive
  // declare the folder name
  var foldername = 'FolderName';

  // declare this sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // clear any existing contents
  sheet.clear();
  // append a header row
  sheet.appendRow(["Folder","Name", "Date Last Updated", "Size", "URL", "ID", "Description", "Type"]);


  // getFoldersByName = Gets a collection of all folders in the user's Drive that have the given name.
  // folders is a "Folder Iterator" but there is only one unique folder name called, so it has only one value (next)
  var folders = DriveApp.getFoldersByName(foldername);
  var foldersnext = folders.next();
  // Logger.log("THE FOLDER IS "+foldersnext);// DEBUG

  // declare an array to push data into the spreadsheet
  var data = [];

  // list files in this folder
  // myfiles is a File Iterator
  var myfiles = foldersnext.getFiles();

  // Logger.log("FILES IN THIS FOLDER"); DEBUG

  // loop through files in this folder
  while (myfiles.hasNext()) {
    var myfile = myfiles.next();
    var fname = myfile.getName();
    var fdate = myfile.getLastUpdated(); 
    var fsize = myfile.getSize();
    var furl = myfile.getUrl();
    var fid = myfile.getId();
    var fdesc = myfile.getDescription();
    var ftype = myfile.getMimeType();
    //Logger.log("File Name is "+myfile.getName()); //Logger.log("Date is "+myfile.getLastUpdated()); //Logger.log("Size is "+myfile.getSize());
    //Logger.log("URL is "+myfile.getUrl()); //Logger.log("ID is "+myfile.getId()); //Logger.log("Description is "+myfile.getDescription());
    //Logger.log("File Type is "+myfile.getMimeType());

    // Populate the array for this file
    data = [ 
      foldersnext,
      fname,
      fdate,
      fsize,
      furl,
      fid,
      fdesc,
      ftype
    ];
    //Logger.log("data = "+data); //DEBUG
    sheet.appendRow(data);
  } // Completes listing of the files in the named folder

  // Now get the subfolder
  // subfolders is a Folder Iterator
  var subfolders = foldersnext.getFolders();
  //Logger.log("THE SUBFOLDER(S) ARE"); DEBUG HEADING

  // now start a loop on the SubFolder list
  while (subfolders.hasNext()) {
    var subfolderdata = [];
    var mysubfolders = subfolders.next();
    var mysubfolder = mysubfolders.getName();  
    //Logger.log("Subfolder name:"+mysubfolder); //DEBUG

    // Get the files
    // mysubfiles is a File Iterator
    var mysubfiles = mysubfolders.getFiles();
    //Logger.log("FILES IN THIS FOLDER"); //DEBUG HEADING

    // now start a loop on the files in the subfolder
    while (mysubfiles.hasNext()) {
      var smyfile = mysubfiles.next();
      var sfname =  smyfile.getName();
      var sfdate =  smyfile.getLastUpdated(); 
      var sfsize =  smyfile.getSize();
      var sfurl =  smyfile.getUrl();
      var sfid =  smyfile.getId();
      var sfdesc =  smyfile.getDescription();
      var sftype =  smyfile.getMimeType();
      //Logger.log("Subfolder is "+foldersnext+"/"+mysubfolder); 
      //Logger.log("File Name is "+ smyfile.getName()); Logger.log("Date is "+ smyfile.getLastUpdated()); Logger.log("Size is "+ smyfile.getSize());
      //Logger.log("URL is "+ smyfile.getUrl()); Logger.log("ID is "+ smyfile.getId()); Logger.log("Description is "+ smyfile.getDescription());Logger.log("File Type is "+ smyfile.getMimeType());
      subfolderdata = [ 
        (foldersnext+"/"+mysubfolder),
        sfname,
        sfdate,
        sfsize,
        sfurl,
        sfid,
        sfdesc,
        sftype
      ];
      //Logger.log("subfolderdata = "+subfolderdata);
      sheet.appendRow(subfolderdata);
    }
  }
}

我的帖子不会走低路,因为我的帖子主要是代码,我需要发布更多详细信息".但实际上没有更多要添加的细节.

My post wouldn't go trough because my post is mostly code and i need to post "more details". But there is no more details to add really.

所以我不会在整个职位上都画独角兽.

So instead of drawing unicorns all over the post i'm gonna do this.

忽略下面

Lorem ipsum dolor坐下,奉献己任,sius do eiusmod tempor incididunt ut Labore et dolore magna aliqua.Vel quam elementum pulvinar etiam non quam.Eu mi bibendum neque egestas.Tempor nec feugiat nisl pretium.Vulputate enim nulla aliquet porttitor.在不服从教条的情况下,在伊勒修斯·乌尔纳演奏会上扮演一个小角色.Suspendisse sed nisi lacus sed viverratellus in hac.致病性鼻息肉性阴道炎.请坐amet Tellus cras adipiscing enim eu.Sapien et ligula ullamcorper malesuada.Quis veleros donec ac.Aenean sed adipiscing diam donec adipiscing tristique risus nec.Quis eleifend quam adipiscing vitain progit sagittis nisl.Nunc eget lorem dolor sed viverra ipsum nunc aliquet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vel quam elementum pulvinar etiam non quam. Eu mi bibendum neque egestas. Tempor nec feugiat nisl pretium. Vulputate enim nulla aliquet porttitor. In dictum non consectetur a erat nam at lectus urna. Suspendisse sed nisi lacus sed viverra tellus in hac. Ipsum consequat nisl vel pretium lectus quam id. Sit amet tellus cras adipiscing enim eu. Sapien et ligula ullamcorper malesuada. Quis vel eros donec ac. Aenean sed adipiscing diam donec adipiscing tristique risus nec. Quis eleifend quam adipiscing vitae proin sagittis nisl. Nunc eget lorem dolor sed viverra ipsum nunc aliquet.

获取felis eget nunc lobortis mattis aliquam faucibus.发酵罐中的格拉维达和sollicitudin.尼氏紫苏在mollis nunc sed中.Diam volutpat comedo ed egestas egestas fringilla phasellus.Nunc sed velit dignissim sodales.Egestas integer eget aliquet nibh praesent tristique.坐着amet诅咒坐着amet量词坐着.Et ligula ullamcorper malesuada proin libero nunc.Suspendisse potenti nullam actor to vitae purus faucibus ornare.调味品的藤本植物.Aliquam eleifend mi在nulla posuere sollicitudin中.在tempor commodo ullamcorper的Dictum豆荚前庭.Placerat orci nulla pellentesque dignissim.Montes nascetur ridiculus mus mauris vitae.Lacussuspenstisfaucibusinterdumposuere lorem ipsum dolor.Maecenas pharetra convallis posuere morbi leo urna molestie在elementum.Massa ultricies mi quis hendrerit dolor magna.Et sollicitudin ac orci phasellus.ut placerat orci nulla pellentesque dignissim enim坐在amet venenatis.

Eget felis eget nunc lobortis mattis aliquam faucibus. Gravida in fermentum et sollicitudin. Nisl purus in mollis nunc sed. Diam volutpat commodo sed egestas egestas fringilla phasellus. Nunc sed velit dignissim sodales. Egestas integer eget aliquet nibh praesent tristique. Sit amet cursus sit amet dictum sit. Et ligula ullamcorper malesuada proin libero nunc. Suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Condimentum lacinia quis vel eros donec ac odio tempor orci. Aliquam eleifend mi in nulla posuere sollicitudin. Dictum at tempor commodo ullamcorper a lacus vestibulum. Placerat orci nulla pellentesque dignissim. Montes nascetur ridiculus mus mauris vitae. Lacus suspendisse faucibus interdum posuere lorem ipsum dolor. Maecenas pharetra convallis posuere morbi leo urna molestie at elementum. Massa ultricies mi quis hendrerit dolor magna. Et sollicitudin ac orci phasellus. Ut placerat orci nulla pellentesque dignissim enim sit amet venenatis.

推荐答案

您需要递归调用函数.我将您的代码调整为3个函数 ListNamedFilesandFolders(),以启动递归函数,即 listFilesAndSubfolders(),该函数为每个文件夹调用 listFiles()列出文件.我只需要使用getFolders()[1]函数:

You need to call a function recursively. I tweak your code into 3 functions ListNamedFilesandFolders() to initiate the recursively function which is listFilesAndSubfolders() which calls listFiles() for every folder to list the files. I just needed to use getFolders() [1] function:

function ListNamedFilesandFolders() {
  /* Adapted from Code written by @hubgit https://gist.github.com/hubgit/3755293
  Updated since DocsList is deprecated  https://ctrlq.org/code/19854-list-files-in-google-drive-folder
  */

  // List all files and sub-folders in a single folder on Google Drive
  // declare the folder name
  var foldername = 'FolderName';

  // declare this sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // clear any existing contents
  sheet.clear();
  // append a header row
  sheet.appendRow(["Folder","Name", "Date Last Updated", "Size", "URL", "ID", "Description", "Type"]);

  // getFoldersByName = Gets a collection of all folders in the user's Drive that have the given name.
  // folders is a "Folder Iterator" but there is only one unique folder name called, so it has only one value (next)
  var folders = DriveApp.getFoldersByName(foldername);
  var foldersnext = folders.next();
  // Logger.log("THE FOLDER IS "+foldersnext);// DEBUG

  //Initiate recursive function
  listFilesAndSubfolders(foldersnext, foldername);  
}

function listFilesAndSubfolders(folder, path) {
  listFiles(folder, path);
  var subfolders = folder.getFolders();

  while (subfolders.hasNext()) {
    var mysubfolders = subfolders.next();
    var mysubfolderName = mysubfolders.getName(); 
    path = path + "/" + mysubfolderName;
    listFilesAndSubfolders(mysubfolders, path);    
  }
}

function listFiles(foldersnext, path) {
  var data = [];
  var sheet = SpreadsheetApp.getActiveSheet();

  // list files in this folder
  // myfiles is a File Iterator
  var myfiles = foldersnext.getFiles();
  // Logger.log("FILES IN THIS FOLDER"); DEBUG

  // loop through files in this folder
  while (myfiles.hasNext()) {
    var myfile = myfiles.next();
    var fname = myfile.getName();
    var fdate = myfile.getLastUpdated(); 
    var fsize = myfile.getSize();
    var furl = myfile.getUrl();
    var fid = myfile.getId();
    var fdesc = myfile.getDescription();
    var ftype = myfile.getMimeType();
    //Logger.log("File Name is "+myfile.getName()); //Logger.log("Date is "+myfile.getLastUpdated()); //Logger.log("Size is "+myfile.getSize());
    //Logger.log("URL is "+myfile.getUrl()); //Logger.log("ID is "+myfile.getId()); //Logger.log("Description is "+myfile.getDescription());
    //Logger.log("File Type is "+myfile.getMimeType());

    // Populate the array for this file
    data = [ 
      path,
      fname,
      fdate,
      fsize,
      furl,
      fid,
      fdesc,
      ftype
    ];
    //Logger.log("data = "+data); //DEBUG
    sheet.appendRow(data);
  } // Completes listing of the files in the named folder

}

当有多个子文件夹时,我找不到为每个文件获取正确路径的方法.

I wasn't able to find a way to get the correct path for each file when there are more than one sub-folder.

[1] https://developers.google.com/apps-script/reference/drive/drive-app#getfolders

这篇关于如何在Google云端硬盘的子文件夹中也列出文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆