根据您的描述,以下功能非常适合您的场景:
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()。将 while 循环转移到不同的函数并传递文件夹 ID 以遍历该文件夹中的文件并以类似的方式更改它们的所有权。在第二种情况下,您的代码将如下所示:
//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);
}
您希望在何种粒度级别和多少嵌套文件夹上执行该功能以及如何遍历这些文件夹,这取决于您。但这应该让您对如何完成有一个公平的了解。
希望这会有所帮助。