谷歌应用脚本 - 迭代文件夹和子文件夹
Google apps script - iterate folder and subfolder
我想使用谷歌应用脚本遍历谷歌云端硬盘中文件夹的树结构。下面的代码列出了一些文件夹,但不是全部。您能建议向下钻取文件夹结构的最佳技术是什么吗?我首先尝试记录所有文件夹名称。
谢谢。
function test() {
listSubfolders(DriveApp.getFolderById('FOLDER_ID'));
}
function listSubfolders(parentFolder) {
var childFolders = parentFolder.getFolders();
while(childFolders.hasNext()) {
Logger.log(childFolders.next().getName());
listSubfolders(childFolders.next());
}
}
要访问子文件夹,您可以通过这种方式进行操作,
function getSubFolders(parent) {
parent = parent.getId();
var childFolder = DriveApp.getFolderById(parent).getFolders();
while(childFolder.hasNext()) {
var child = childFolder.next();
Logger.log(child.getName());
getSubFolders(child);
}
return;
}
function listFolders() {
var parentFolder = DriveApp.getFolderById("0B1n6YLYwFmK_dUpzRWhDRXNwdWc");
var childFolders = parentFolder.getFolders();
while(childFolders.hasNext()) {
var child = childFolders.next();
Logger.log(child.getName());
getSubFolders(child);
}
}
此Google脚本将生成一个包含所有文件和文件夹的Google云端硬盘树。
将此脚本复制到脚本编辑器。从"选择函数"菜单中选择函数"genFolderTree"。将根文件夹名称"RootDir"更改为函数 genFolderTree() 中的根目录
var foldername = 'RootDir';
谷歌脚本源代码 -
function genFolderTree() {
try {
var foldername = 'RootDir';
var folderlisting = 'TreeView_' + foldername;
var parentFolder = DriveApp.getFoldersByName(foldername).next();
var ss = SpreadsheetApp.create(folderlisting);
var sheet = ss.getActiveSheet();
var frontCell = [];
sheet.appendRow([foldername]).getCurrentCell().setFontWeight('bold').setFontColor('red');
frontCell.push(" ");
getChildNode(parentFolder,sheet,frontCell);
var files = parentFolder.getFiles();
while (files.hasNext()) {
frontCell.push(files.next().getName());
sheet.appendRow( frontCell);
frontCell.pop();
}
} catch (e) {
Logger.log(e.toString());
}
}
function getChildNode(parent,sheet,frontCell) {
var childFolders = parent.getFolders();
while (childFolders.hasNext()) {
var childFolder = childFolders.next();
frontCell.push(childFolder.getName())
sheet.appendRow(frontCell);
sheet.getRange(sheet.getLastRow(), frontCell.length).setFontWeight('bold').setFontColor('red');
frontCell.pop();
var files = childFolder.getFiles();
frontCell.push(" ");
var start_row = 0;
var row_no = 0;
while (files.hasNext()) {
frontCell.push(files.next().getName());
sheet.appendRow(frontCell);
if(row_no==0){
start_row = sheet.getLastRow();
}
row_no=row_no+1;
frontCell.pop();
}
if(row_no>0){
var range;
range = sheet.getRange(start_row, frontCell.length,row_no);
// The row grouping depth is increased by row_no.
range.shiftRowGroupDepth(1);
}
// Recursive call for any sub-folders
getChildNode(childFolder,sheet,frontCell);
frontCell.pop();
}
}
您可以从Github链接下载源代码
认为这种方法可能不那么重复。 这将输出一个完整路径名,格式如下:
'/root/Directory/Directory/Directory/...'
在"记录器"行所在的位置,您可以访问当前文件夹对象(callingFolder),因此此时您可以在该文件夹上插入任何操作。
function myFunction() {
var topFolder = DriveApp.getFolderById("0AMBwhqwkCWBbUk9PVA");
var topPath = "/";
iterateSubFolders(topFolder, topPath);
}
function iterateSubFolders(callingFolder, callingPath) {
var callingFolderName = callingFolder.getName();
var callingFolderFullPath = callingPath + callingFolderName + "/";
Logger.log(callingFolderFullPath);
var childSubFolders = callingFolder.getFolders();
while (childSubFolders.hasNext()) {
var nextSubFolder = childSubFolders.next();
iterateSubFolders(nextSubFolder, callingFolderFullPath);
}
}
这应该可以解决问题:
function start() {
folder = DriveApp.getFolderById("0B_5HSTQXtXmsOHBzcnc2dTlkRFU")
listFolders(folder)
}
function listFolders(folder) {
//starting point, we come here from start() or from the bottom of this function
//check the name
var name = folder.getName();
if (name.match("TITL")) {
folder.addEditor("somePerson@gmail.com");
}
//now see if this folder has subfolders
var subfolders = folder.getFolders();
//if it has, we call this function again
while (subfolders.hasNext()) {
listFolders(subfolders.next());
}
}
相关文章:
- 迭代 JSON 文件并且未在 Javascript 中正确返回结果
- 文件夹迭代器中的Google驱动器文件迭代器
- PHP对目录文件进行迭代
- 只有最后一个文件是通过迭代形式.submit()操作下载的
- 如何使用 D3 javascript 迭代 JSON 文件中的数据
- 使用 promises/dedelay 异步迭代一组文件
- 如何递归迭代要使用 Promise 获取的文件树结构
- 服务器端迭代目录中的文件
- 谷歌应用脚本 - 迭代文件夹和子文件夹
- Node.js将大文件拆分为多个部分,并对这些部分进行迭代
- 如何迭代Google Analytics配置文件ID's
- 使用XPath使用JavaScript在XML文件中的子节点上进行迭代
- 获取按钮,显示XML文件中循环的下一次迭代
- 快速迭代时处理缓存js文件的最佳方式
- 在web工作者javascript文件中迭代100000个索引的数组会冻结浏览器
- 使用纯javascript和ajax迭代json文件
- 如何在外部jquery.js文件中获取PHP迭代变量
- Google Apps 脚本中的文件迭代器在搜索不存在的文件时返回无效参数
- 使用承诺和递归迭代文件目录
- Grunt.js和文件夹迭代+每个文件夹的选项