Как скопировать папки из MyDrive в TeamDrive с помощью Google Apps Script? - PullRequest
0 голосов
/ 07 января 2019

Я нашел следующий скрипт Google Apps, который позволяет копировать папки из MyDrive в MyDrive и SharedFolders в MyDrive:

function start() {

  var sourceFolder = "source";
  var targetFolder = "target";

  var source = DriveApp.getFoldersByName(sourceFolder);
  var target = DriveApp.createFolder(targetFolder);

  if (source.hasNext()) {
    copyFolder(source.next(), target);
  }

}

function copyFolder(source, target) {

  var folders = source.getFolders();
  var files   = source.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), target);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);
  }  

}

Я попытался изменить его, чтобы скопировать папки из MyDrive в Teamdrive, но у меня не получается, как будто я полный нуб. Может ли кто-нибудь помочь мне обновить его для этой цели?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Спасибо за ваш комментарий, Джеймс. Пожалуйста, имейте в виду, что я хочу перемещать папки (не файлы). Мне удалось сделать это за несколько часов, добавив биты вашего кода случайным образом (мне не хватает знаний, чтобы правильно их добавить, поэтому я уверен, что это плохая работа):

function start() {

  var sourceFolder = "A-folder-in-MyDrive";
  var targetFolder = "MY-TEAMDRIVE-ID";

  var source = DriveApp.getFoldersByName(sourceFolder);
  var target = DriveApp.getFolderById("MY-TEAMDRIVE-ID");

  if (source.hasNext()) {
    copyFolder(source.next(), target);
  }

}

function copyFolder(source, target) {

  var folders = source.getFolders();
  var files   = source.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), target);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);
  }  

}

С этим кодом, если у меня есть следующее в MyDrive:

MyDrive / A-папка-в-MyDrive / MoreFolders / file.txt

Затем в моем TeamDrive создается следующее: TeamDrive / MoreFolders / file.txt

Так что в основном папки внутри sourceFolder копируются в мой TeamDrive!

Теперь, если бы я мог также создать A-folder-in-MyDrive, а не только вложенные папки, расположенные внутри, это было бы замечательно ... Любая помощь будет принята с благодарностью!

0 голосов
/ 07 января 2019

В приведенном ниже примере файл будет перемещен в указанную папку (это может быть командный диск). У меня нет времени, чтобы интегрировать его с вашим кодом в данный момент, но если я освобожусь позже, я выложу лучший ответ. Надеюсь, это поможет

 //Move the new doc to the folder
  var fileId   = DriveApp.getFileById("<<FILEID>>");
  var folder = DriveApp.getFolderById("<<WHERE TO SAVE IT>>");
  var file = DriveApp.getFileById(fileId);

  folder.addFile(file);
...