更改文件夹的所有者&该文件夹中的文件

时间:2015-11-08 23:12:27

标签: google-apps-script google-drive-api

我对脚本编写起来相当新,并且想知道是否可以运行谷歌应用脚​​本来将文件夹和子文件夹/文件的所有者权限更改为其他用户?

目前,我已尝试过这个

function myFunction() {
 var folder = DriveApp.('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
 folder.setOwner("new email owner")
 }

这允许我创建一个已创建文件夹的其他所有者,但我不知道如何为现有文件夹(及其子文件夹和文件)执行此操作。

此外,这些文件将归谷歌应用管理员所有(在权限更改之前)

1 个答案:

答案 0 :(得分:1)

根据您的描述,以下功能可以很好地适用于您的场景:

function folderTransfer()
{
  var fol = DriveApp.getFolderById("**************");
  var files = fol.getFiles();
  var me = "abc@gmail.com";
  var newOwner = "xyz@gmail.com";

  fol.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  fol.setOwner(newOwner);
  fol.removeEditor(me);

  while (files.hasNext())
  {
    var file = files.next();
    file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    file.setOwner(newOwner);
    file.removeEditor(me);
  }
}

删除所有者权限是可选的,但这取决于您在此方案中的用例。根据上面的代码,如果我不删除自己作为所有者,我仍然可以查看和编辑文档,即使在这种情况下所有者现在是xyz@gmail.com。但是,由于所有其他人的权限都设置为仅查看,因此他们将只具有查看权限。

请注意,这是一个简单的功能,它允许我在单个文件夹中传输文件的所有者。但是,类似getFiles()函数之类的函数也应该允许getFolders()//Transfering all files to a new owner function fileTransfer(folderID, owner, newOwner) { var folder = DriveApp.getFolderById(folderID); var files = folder.getFiles(); while (files.hasNext()) { var file = files.next(); file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); file.setOwner(newOwner); file.removeEditor(owner); } } function folderTransfer() { var fol = DriveApp.getFolderById("************************"); var files = fol.getFiles(); var me = "abc@gmail.com"; var newOwner = "xyz@gmail.com"; var folders = fol.getFolders(); while (folders.hasNext()) { var folder = folders.next(); var folderID = folder.getId(); fileTransfer(folderID, me, newOwner); folder.setOwner(newOwner); folder.removeEditor(me); } //Transferring parent folder to newOwner fol.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); fol.setOwner(newOwner); fol.removeEditor(me); } 。将while循环传输到另一个函数并传递文件夹ID以遍历该文件夹中的文件并以类似的方式更改其所有权。在第二种情况下,您的代码将如下所示:

input

在什么样的粒度级别以及您希望执行该功能以及如何迭代这些文件的嵌套文件夹数量取决于您。但这应该让你对如何做到这一点有一个很好的了解。

希望这有帮助。