我有这样的 Google 云端硬盘结构设置:
Client A
--Project 1
----Drafts
----Presentations
----Minutes
--Project 2
----Drafts
----Presentations
----Minutes
Client B
<and so on>
我想写一个脚本,我可以在其中传递项目 1 的 ID,它将遍历三个子文件夹中的每一个并计算文件总数(最终我想计算更新的文件数日期范围,但婴儿步骤!)。
我试过使用 Class FolderIterator 代码,但它希望您将一组文件夹分配给变量“文件夹”(它显示 var folders = DriveApp.getFolders();
我试过 var folders = DriveApp.getFolderById("<id of Project 1 here>");
但在我的版本中它只是一个文件夹,它确实需要文件夹的集合)。有没有办法将这三个子文件夹分配给 folders
如果我有父文件夹的 ID 变量?或者是否有更好的方法来遍历子文件夹?
最佳答案
作为对 Bryan 的回答的补充(thx,我投了赞成票)我编写了一个测试函数来查看记录器中的结果并使用适当的参数运行该函数以获得您想要的计数。
(此答案不应选为正确答案,因为主要部分来自 Bryan P)
事情是这样的:
function testTraverse(){
var originFolder = DriveApp.getFoldersByName('Client A').next(); // use the folder name you want here
var totalCount = traverseFolder(originFolder,0);
Logger.log('total files = '+totalCount);// note that if some files are
// in more than one subfolder the count will count every occurrence of
//this file so the total might be > to the sum of intermediate values
}
function traverseFolder(folder,total) {
var name = folder.getName();
var count = 0;
var files = folder.getFiles();
while (files.hasNext()) {
count++;
Logger.log('fileName ('+count+') in '+name+' is : '+files.next().getName());
}
Logger.log('\n'+name+' has ' + count+' files\n----------------------\n' );
var subs = folder.getFolders();
while (subs.hasNext()) {
total+=traverseFolder(subs.next(),count);
}
return total;
}
请注意此代码适用于“合理”数量的文件,如果您有许多文件和文件夹,它可能会超过 5 分钟的执行时间限制。在这种情况下,您需要对其进行修改,以便使用该方法提供的 token 处理较小的文件束。
关于google-apps-script - 遍历 Google 云端硬盘中的文件夹/子文件夹/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25145137/