转让GoogleDrive文件夹(包括子文件夹和文件)的所有权

时间:2018-07-20 09:17:02

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

由于公司中的一些用户将文件从文件服务器迁移到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);
  }
}

0 个答案:

没有答案