Есть ли способ получить последнюю созданную подпапку и ее содержимое без указания имени или идентификатора подпапки? - PullRequest
1 голос
/ 23 октября 2019

Я новичок в ГАЗЕ. Мне нужно получить последнюю созданную подпапку и ее содержимое с Google Drive, а затем скопировать ее в какую-то другую подпапку. Есть ли способ сделать это?

Я пытаюсь работать с getDateCreated или getLastUpdated, но, насколько мне известно, это не даст мне фактическую последнюю созданную папку, как кто-то может сделать некоторыередактирование в других подпапках, из-за которых я не смогу получить последнюю созданную подпапку.

function myFunction() {
  var folder = DriveApp.getFolderById('146Q-0X_ljV2K_q');
  var folders = folder.getFolders();
  while(folders.hasNext()) {
    var fol = folders.next();
    var fold = fol.getLastUpdated(); // needs last created folder 
    var fl = fol.getFiles(); // doesn't work gives error 
    Logger.log(fl);
  }
}

// this is just a  practice code for getting the last created folder in a parent folder.

Мне нужна последняя созданная подпапка, а затем скопировать ее содержимое в другую подпапку в другой родительской папке.

1 Ответ

1 голос
/ 23 октября 2019

Вы можете использовать следующий код:

var ROOT_FOLDER_ID = 'YOUR_ROOT_FOLDER_ID';
var DESTINATION_FOLDER_ID = 'YOUR_DESTINATION_FOLDER_ID';

function moveFolder(folder, destinationFolder) {
  var folderParents = folder.getParents();
  while (folderParents.hasNext()) {
    folderParents.next().removeFolder(folder);
  }
  destinationFolder.addFolder(folder);
}

function getLastCreated(folder) {
  var dates = [folder.getDateCreated()];
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    dates.push(file.getDateCreated());
  }
  return Math.max.apply(Math, dates);
}

function myFunction() {
  var rootFolder = DriveApp.getFolderById('1dFyAuwyVn3VFvMxZX2bzxf5K8ygdIol6');
  var folders = rootFolder.getFolders();
  var results = [];
  while (folders.hasNext()) {
    var folder = folders.next();
    var folderId = folder.getId();
    var folderLastCreated = getLastCreated(folder);
    results.push({'folderId': folderId, 'folderLastCreated': folderLastCreated});
  }

  results.sort(mySort);

  var lastCreatedFolder = DriveApp.getFolderById(results[0].folderId);
  var destinationFolder = DriveApp.getFolderById(DESTINATION_FOLDER_ID);
  moveFolder(lastCreatedFolder, destinationFolder);
}

function mySort(a, b) {
  var a = a.folderLastCreated;
  var b = b.folderLastCreated;

  if (a > b) return -1;
  if (a < b) return 1;
  return 0;
}

Он найдет папку, которая была создана в последний раз (или что любой из ее дочерних элементов был создан в последний раз), а затем переместит ее в папку назначения. Если вам нужно переместить папку, которая была наименее недавно созданной , вам нужно только изменить функцию mySort(a, b) на следующую:

function mySort(a, b) {
  var a = a.folderLastCreated;
  var b = b.folderLastCreated;

  if (a > b) return 1;
  if (a < b) return -1;
  return 0;
}

, чтобы сделатьэто работает, пожалуйста, не забудьте изменить первые две строки для идентификаторов желаемой папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...