首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除空文件夹Team Drive

删除空文件夹Team Drive
EN

Stack Overflow用户
提问于 2018-02-28 02:39:56
回答 2查看 1.8K关注 0票数 2

在迁移到团队驱动器的过程中,我们有一个文件夹被迁移了两次。第一次被中断了,现在我们有数千个重复的文件夹,里面什么都没有。我希望删除或至少删除特定团队驱动器上完全为空的任何文件夹。我发现了一个旧的脚本,我尝试修改如下:

代码语言:javascript
复制
   function delEmptyFolders() {

var folders = DriveApp.getFolders();

var ss = SpreadsheetApp.create("folderslist");

while (folders.hasNext()) {

var folder = folders.next();

var files = folder.getFiles();

var childfolders = folder.getFolders();

var filecount = 0;

var foldercount = 0;

while (childfolders.hasNext()){

var childfolder = childfolders.next();

foldercount ++;

}

while (files.hasNext()){

var file = files.next();

filecount ++;

}

ss.appendRow([folder.getId(),folder.getName(),filecount, foldercount]);

if (filecount == 0 && foldercount == 0){

folder.setTrashed(true);

}

}

}

我的问题是,我如何让这个脚本在特定的团队驱动器上运行,或者更好的是,在团队驱动器的特定文件夹中运行?

注释中回答了原始问题-下面是新脚本-注释中的后续问题

提前感谢你的帮助和我的道歉,因为我在编码或脚本没有很好的经验。

代码语言:javascript
复制
 function starEmptyFolders() {

     var folders = DriveApp.getFolderById('ID').getFolders();


var ss = SpreadsheetApp.create("test");

while (folders.hasNext()) {

var folder = folders.next();

var files = folder.getFiles();

var childfolders = folder.getFolders();

var filecount = 0;

var foldercount = 0;

while (childfolders.hasNext()){

var childfolder = childfolders.next();

foldercount ++;

}

while (files.hasNext()){

var file = files.next();

filecount ++;
}

  ////////////////////
var child = childfolders;
  var subFolders = child.getFolders();
  while(subFolders.hasNext()) {
    var subFolder = subFolders.next();
    var subfoldercount = 0;
    subfoldercount ++}




  ///////////////////////////
}
  ss.appendRow([folder.getId(),folder.getName(),filecount, foldercount, subfoldercount,]);

if (filecount == 0 && foldercount == 0){

folder.setStarred(true);
EN

回答 2

Stack Overflow用户

发布于 2019-07-17 03:31:56

这是一个修改过的函数,它将递归地删除空文件夹并将它们记录到电子表格中。

代码语言:javascript
复制
function deleteEmptyFolders() {
  var parentFolder = DriveApp.getFolderById('<folder ID goes here>');
  var folders = parentFolder.getFolders();
  var ss = SpreadsheetApp.create("ScriptDeletes");
  while (folders.hasNext()) {
    var childfolder = folders.next();
    recurseFolder(parentFolder, childfolder, ss);
  }
}

function recurseFolder(parentFolder, folder, ss) {
        var filecount = 0;
        var foldercount = 0;

        var files = folder.getFiles();               // get the list of files in the root of that folder
        var childfolders = folder.getFolders();      // get the list of sub folders in the root of that folder

        while (childfolders.hasNext()) {               // count the sub folders
            var childfolder = childfolders.next();
            recurseFolder(folder, childfolder, ss);
            foldercount++;
        }

        while (files.hasNext()) {                      // count the files in the root of the folder
            var file = files.next();
            filecount++;
        }

       if (filecount == 0 && foldercount == 0) {            
            parentFolder.removeFolder(folder);
            ss.appendRow([folder.getId(),folder.getName(),filecount, foldercount]);
       }             
}
票数 1
EN

Stack Overflow用户

发布于 2020-05-12 01:11:50

我稍微修改了@Brett的答案,因为它是以自上而下的顺序而不是自下而上的顺序遍历目录树的。我有很多嵌套的空子目录,并希望将它们全部删除,所以最好在递归之后(重新)检查filecount/foldercount,以便考虑到更深层次的删除。我也通过不关心filecount或foldercount来加快速度,只关心文件是否存在

此外,如果您想删除文件夹,我认为与.removeFolder相反,使用.setTrashed更好,这样它就会被丢弃,它只会将它移动到隐藏的顶级目录

代码语言:javascript
复制
function deleteEmptyFolders() {
  var parentFolder = DriveApp.getFolderById('FOLDER_ID');
  var folders = parentFolder.getFolders();
  var ss = SpreadsheetApp.openById("SPREADSHEET_ID")
  while (folders.hasNext()) {
    var childfolder = folders.next();
    recurseFolder(parentFolder, childfolder, ss);
  }
}

function recurseFolder(parentFolder, folder, ss) {


  var childfolders = folder.getFolders();      // get the list of sub folders in the root of that folder

  while (childfolders.hasNext()) {               // count the sub folders
    var childfolder = childfolders.next();
    recurseFolder(folder, childfolder, ss);
  }

  var hasFile = folder.getFiles().hasNext();               // get the list of files in the root of that folder
  var hasFolder = folder.getFolders().hasNext();               // get the list of files in the root of that folder

  if (!hasFile && !hasFolder) {            
    folder.setTrashed(true)
    ss.appendRow([folder.getId(),folder.getName()]);
  }             
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49015740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档