由于公司中的一些用户将文件从文件服务器迁移到Google云端硬盘,因此有必要更改文件夹及其所有包含子文件夹和文件的所有权。 首先,我将整个文件夹复制到驱动器(以这种方式获取所有权),然后启动脚本将所有权转移给新所有者。
我写了一个小脚本,对于一些较小的文件夹(大约<1GB)来说,它可以正常工作,但是在转让较大文件夹的所有权时,几乎总是给我一个错误:
不允许采取的措施(第85行,文件“代码”)
第85行包含以下代码:
file.setOwner(newOwner);
我必须多次运行该脚本,迟早要成功完成。
不知道脚本为什么会出现该错误。
有什么想法吗? 非常感谢!
脚本:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Transfer')
.addItem('Transfer Folder', 'Transferfolder')
.addSeparator()
.addItem('Disable Sharing Settings for Editors', 'Ownersettings')
.addToUi();
}
function Transferfolder()
{
var me=Session.getActiveUser().getEmail();
var ss = SpreadsheetApp.getActive();
var data = ss.getDataRange().getValues();
var idname=data[2][1];
var newOwner=data[3][1];
var fol = DriveApp.getFolderById(idname);
subfolderTransfer(fol,me,newOwner);
}
function Ownersettings()
{
var me=Session.getActiveUser().getEmail();
var ss = SpreadsheetApp.getActive();
var data = ss.getDataRange().getValues();
var idname=data[2][1];
var fol = DriveApp.getFolderById(idname);
disablesharebyeditors(fol,me);
}
function disablesharebyeditors(fol,me)
{
var files = fol.getFiles();
var folders=fol.getFolders();
Logger.log(fol.getOwner().getEmail());
if(fol.getOwner().getEmail()==me){
fol.setShareableByEditors(false);
Logger.log(fol);
}
while (files.hasNext())
{
var file = files.next();
if(file.getOwner().getEmail()==me){
file.setShareableByEditors(false);
}
}
while (folders.hasNext())
{
var subfolder = folders.next();
disablesharebyeditors(subfolder,me);
}
}
function subfolderTransfer(fol,me,newOwner)
{
Logger.log("subfolderTransfer");
var files = fol.searchFiles('"me" in owners');
var folders=fol.searchFolders('"me" in owners')
Logger.log(fol.getName());
if(fol.getOwner().getEmail()==me){
fol.setOwner(newOwner);
}
//file.removeEditor(me);
while (files.hasNext())
{
var file = files.next();
Logger.log(file.getName());
if(file.getOwner().getEmail()==me){
file.setOwner(newOwner);
}
}
Logger.log("folders");
while (folders.hasNext())
{Logger.log(fol.getName());
var subfolder = folders.next();
subfolderTransfer(subfolder,me,newOwner);
}
}
function transferfiles(files,me,newOwner)
{
while (files.hasNext())
{
var file = files.next();
if(file.getOwner().getEmail()==me){
file.setOwner(newOwner);
}
//file.removeEditor(me);
}
}