Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 删除团队驱动器中的空文件夹_Google Apps Script_Google Drive Api_Google Drive Shared Drive - Fatal编程技术网

Google apps script 删除团队驱动器中的空文件夹

Google apps script 删除团队驱动器中的空文件夹,google-apps-script,google-drive-api,google-drive-shared-drive,Google Apps Script,Google Drive Api,Google Drive Shared Drive,在迁移到Team Drive的过程中,我们有一个文件夹被迁移了两次。第一次被中断,我们现在有数千个重复的文件夹,其中没有任何内容。我想删除或至少删除特定团队驱动器上完全为空的任何文件夹。我在下面找到了一个我试图修改的旧脚本: function delEmptyFolders() { var folders = DriveApp.getFolders(); var ss = SpreadsheetApp.create("folderslist"); while (folders.has

在迁移到Team Drive的过程中,我们有一个文件夹被迁移了两次。第一次被中断,我们现在有数千个重复的文件夹,其中没有任何内容。我想删除或至少删除特定团队驱动器上完全为空的任何文件夹。我在下面找到了一个我试图修改的旧脚本:

   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);

}

}

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

评论中回答的原始问题-下面的新脚本-评论中的后续问题

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

 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);

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

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]);
       }             
}
函数deleteEmptyFolders(){
var parentFolder=DriveApp.getFolderById(“”);
var folders=parentFolder.getFolders();
var ss=SpreadsheetApp.create(“脚本删除”);
while(folders.hasNext()){
var childfolder=folders.next();
递归文件夹(parentFolder、childfolder、ss);
}
}
函数recurseFolder(父文件夹、文件夹、ss){
var filecount=0;
var foldercount=0;
var files=folder.getFiles();//获取该文件夹根目录中的文件列表
var childfolders=folder.getFolders();//获取该文件夹根目录中的子文件夹列表
while(childfolders.hasNext()){//count子文件夹
var childfolder=childfolders.next();
递归文件夹(文件夹,子文件夹,ss);
foldercount++;
}
while(files.hasNext()){//计算文件夹根目录中的文件
var file=files.next();
filecount++;
}
如果(filecount==0&&foldercount==0){
parentFolder.removeFolder(文件夹);
appendRow([folder.getId(),folder.getName(),filecount,foldercount]);
}             
}

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

另外,如果您想删除文件夹,我认为最好使用
.setTrashed
将其删除,而不是
.removeFolder
将其移动到一个隐藏的顶级目录

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()]);
  }             
}

看我的。这可能对你有帮助。非常感谢!在您的帮助下,我可以为那些可能正在搜索相同内容的人编写上述脚本(在原始帖子的底部,注释中没有字符):我的后续问题(不确定是否应该创建新主题)是,在我的///////标记之间,我试图使脚本获得子文件夹(第二级),但是它一直告诉我:TypeError:在对象FolderIterator中找不到函数getFolders。有没有更好的方法让它在电子表格中列出子文件夹?