首页 > 解决方案 > Google 脚本列出文件夹、子文件夹和文件

问题描述

我有一个谷歌脚本,列出了一个谷歌驱动器文件夹的文件夹名称、文件夹 ID、文件名和文件 ID,包括子文件夹。但是,在第一行中,我需要文件的完整完整路径,而不是文件夹名称

例如,名为 abc.pdf 的文件位于 /documents/files/new/abc.pdf 文件夹中

我的脚本向我显示文件夹名称new而不是完整文件夹路径/documents/files/new/

`function listFolderContents() {

  var ss = SpreadsheetApp.getActive();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clearContents();
  sheet.appendRow(["Foldername","FolderID","Filename","FileID"]);

  var topFolderID = DriveApp.getFolderById('FOLDER_ID_HERE');
  var foldername = topFolderID.getName();

  var folders = DriveApp.getFoldersByName(foldername)
  var folder = folders.next();                  
  traverseFolder(folder, sheet);

  sortByFoldername();
};

function traverseFolder(folder, sheet) { 
  listFilesInFolder(folder, sheet);  
  var subFolders = folder.getFolders();
  while (subFolders.hasNext()) {
    traverseFolder(subFolders.next(), sheet);
  }
}

function listFilesInFolder(folder, sheet) {
  var folderID = folder.getId();
  var foldername = folder.getName();
  var contents = folder.getFiles();  
  while(contents.hasNext()) {
    var file = contents.next();
    var filename = file.getName();
    var fileID = file.getId();
    sheet.appendRow( [foldername,folderID,filename,fileID] );     
  } 
}

function sortByFoldername(){
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Sheet1');
  var range = sheet.getRange("A2:D");
  range.sort([{column: 1, ascending: true}]);
  }`

标签: directorygoogle-drive-api

解决方案


我终于做到了!!!该脚本按预期工作,并将创建一个包含 Google Drive 文件夹中包含的所有文件夹和文件的 FolderName、FolderID、Filename 和 FileID 的列表:

    var folderId = 'FOLDERIDGOESHERE'; //Replace the folder id with the folder id of the parent folder in the Google Drive, where you would like to start sorting through the drive. 


// Main function 1: List all folders, & write into the current sheet.
function listFolders(){
  getFolderTree(folderId, false);
};

// Main function 2: List all files & folders, & write into the current sheet.
function listAll(){
  getFolderTree(folderId, true); 
};

// =================
// Get Folder Tree
function getFolderTree(folderId, listAll) {
  try {
    // Get folder by id
    var parentFolder = DriveApp.getFolderById(folderId);

    // Initialise the sheet
    var file, data, sheet = SpreadsheetApp.getActiveSheet();
    sheet.clear();
    sheet.appendRow(["Full Path", "Folder ID", "FileName"]);

    // Get files and folders
    getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);

  } catch (e) {
    Logger.log(e.toString());
  }
};

// Get the list of files and folders and their metadata in recursive mode
function getChildFolders(parentName, parent, data, sheet, listAll) {
  var childFolders = parent.getFolders();

  // List folders inside the folder
  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    // Logger.log("Folder Name: " + childFolder.getName());
    data = [ 
      parentName + "/" + childFolder.getName(),
      childFolder.getId()


    ];
    // Write
    sheet.appendRow(data);

    // List files inside the folder
    var files = childFolder.getFiles();
    while (listAll & files.hasNext()) {
      var childFile = files.next();
      // Logger.log("File Name: " + childFile.getName());
      data = [ 
        parentName + "/" + childFolder.getName(),
        childFolder.getId(),
        childFile.getName(),
        childFile.getId()

      ];
      // Write
      sheet.appendRow(data);
    }

    // Recursive call of the subfolder
    getChildFolders(parentName + "/" + childFolder.getName(), childFolder, data, sheet, listAll);  
  }
};    

推荐阅读