directory - 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}]);
}`
解决方案
我终于做到了!!!该脚本按预期工作,并将创建一个包含 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);
}
};
推荐阅读
- python - 替换功能不替换文本
- python-3.x - Python中的字符串匹配关键字和关键短语
- powershell - 如何在powershell中绕过MFA连接到O365
- node.js - 通过忽略 .gitignore 中的文件来隐藏密码,但无法部署到 Heroku?
- powerbi - Power BI 桌面数据存储在哪里:我的笔记本电脑本地还是云中?
- django - Docker 容器未在 Linux 上运行
- spring-security - hybris中的饲料验证器?
- swagger - Swagger YML 参考具体的 Java 对象
- gem5 - 在 x86 的完整系统模拟中使用 gem5 驱动的 Ramulator 时出现相同的统计错误
- ssl - 机器人框架请求找不到证书路径