Скопируйте папку «Одна папка» в другую папку на Google Диске, используя имя файла - PullRequest
2 голосов
/ 11 октября 2019

У меня есть две папки в учетной записи Google Drive. «Папка 1» и «Папка 2». внутри «Папка 1» есть несколько файлов. Допустим, есть имя файла Test.txt Я хочу скопировать файл Test.txt в «Папку 2» с помощью Driveapp. Я нашел код, но он работает только с «File Unique ID». В любом случае, мы можем сделать это только по имени файла?

function copyfile() {

var file = DriveApp.getFileById("1pkwQ9te-EtpqC_NC3BoHzOTUoC7axZDcAfxrqMgslwg");

var source_folder = DriveApp.getFolderById("0B8_ub-Gf21e-fkxjSUwtczJGb3picl9LUVVPbnV6Vy1aRFRWc21IVjRkRjBPTV9xMWJLRFU")

var dest_folder = DriveApp.getFolderById("0B8_ub-Gf21e-flJ4VmxvaWxmM2NpZHFyWWxRejE5Y09CRWdIZDhDQzBmU2JnZnhyMTU2ZHM")
// Make a backup copy.

var file2 = file.makeCopy('BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + file.getName());
dest_folder.addFile(file2);

source_folder.removeFile(file2);
  }

, если я использую имя файла вместо File Unqiue ID, я получаю ошибку:

"Ошибка типа: не удается найти функцию makeCopy в объекте FileIterator."

1 Ответ

1 голос
/ 11 октября 2019
  • Вы хотите скопировать файл с именем Test.txt в исходной папке в папку назначения, изменив имя файла.
  • Вы хотите скопировать файл, используя имя файла.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

  • Чтобы получить файл с использованием имени файла, используйте метод getFilesByName(). В этом случае возвращается «FileIterator», поскольку файлы с таким же именем файла могут существовать на Google Диске.
    • Когда имя файла используется для getFileById(fileId), возникает ошибка.
    • Используя это, чтобы получить файл в определенной папке, измените его на source_folder.getFilesByName(filename).
  • Когда файл копируется, вы можете использовать метод makeCopy (имя, место назначения) . Таким образом, файл может быть непосредственно скопирован в папку назначения.

Когда ваш сценарий изменен, он выглядит следующим образом.

Pattern 1:

InВ этом шаблоне используется идентификатор папки.

Модифицированный скрипт:

function copyfile() {
  var filename = "Test.txt";
  var sourceFolderId = "0B8_ub-Gf21e-fkxjSUwtczJGb3picl9LUVVPbnV6Vy1aRFRWc21IVjRkRjBPTV9xMWJLRFU";
  var destinationFolderId = "0B8_ub-Gf21e-flJ4VmxvaWxmM2NpZHFyWWxRejE5Y09CRWdIZDhDQzBmU2JnZnhyMTU2ZHM";
  var source_folder = DriveApp.getFolderById(sourceFolderId);
  var file = source_folder.getFilesByName(filename);
  if (file.hasNext()) {
    var dest_folder = DriveApp.getFolderById(destinationFolderId);
    var srcFile = file.next();
    var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
    srcFile.makeCopy(newName, dest_folder);
  }
}
  • Когда вы запускаете скрипт, если в файле есть файл с именем Test.txtИсходная папка, файл копируется в папку назначения.

Шаблон 2:

В этом шаблоне используется имя папки.

Модифицированный скрипт:

function copyfile() {
  var filename = "Test.txt";
  var sourceFolderName = "Folder 1";
  var destinationFolderName = "Folder 2";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  var file = source_folder.getFilesByName(filename);
  if (file.hasNext()) {
    var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
    var srcFile = file.next();
    var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
    srcFile.makeCopy(newName, dest_folder);
  }
}
  • В этом случае предполагается, что в Google Диске существуют папки Folder 1 и Folder 2.

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направлениеВы хотите, я прошу прощения.

Редактировать:

  • Вы хотите скопировать два файла "Test.txt" и "Test2.txt" в папку Folder 1.

В этой ситуации, как насчет следующего сценария?

Пример сценария 1:

function copyfile() {
  var filenames = ["Test.txt", "Test2.txt"];
  var sourceFolderName = "Folder 1";
  var destinationFolderName = "Folder 2";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  for (var i = 0; i < filenames.length; i++) {
    var filename = filenames[i];
    var file = source_folder.getFilesByName(filename);
    if (file.hasNext()) {
      var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
      var srcFile = file.next();
      var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
      srcFile.makeCopy(newName, dest_folder);
    }
  }
}
  • Если вы хотите добавить имена файлов, добавьте ихв массив filenames.

Пример сценария 2:

Если вы хотите скопировать все файлы в папке Folder 1 в папку Folder 2, выможно использовать следующий скрипт.

function copyfile() {
  var sourceFolderName = "Folder 1";
  var destinationFolderName = "Folder 2";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  var files = source_folder.getFiles();
  var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
  while (files.hasNext()) {
    var srcFile = files.next();
    var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
    srcFile.makeCopy(newName, dest_folder);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...