Удалить файлы, которые не начинаются с даты (GAS - Google Drive) - PullRequest
1 голос
/ 23 октября 2019

Сегодня скрипт удаляет файлы, которые начинаются с даты, более ранней, чем сегодня:

function getOldFileIDs() {
  var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXXXXX');
  var files = folder.getFiles();
  var shift = new Date().getTime() + 1000*60*60*5
  var today = new Date(new Date(shift).toDateString()).getTime();
  var obj = [];
  while (files.hasNext()) {
    var file = files.next();
    var dateFromFilename = file.getName().substr(0, 10);
    if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) {
      var date = new Date(dateFromFilename).getTime();
      if (date < today) {
        obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()});
      }
    }
  }
  return obj;
};

function deleteFiles() {
  var email = "XXXXXXXXXXXXXXXXXXXX@gmail.com";
  var obj = getOldFileIDs();
  obj.forEach(function(e) {
    if (e.owner == email) {
      Drive.Files.remove(e.id);
    }
  });
};

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

Правильный путь: 2019/10/20 Europe Lille x PSG.pdf

Удалить, если: Europe Lille x PSG.pdf

Что мне нужно настроить и как будет выглядеть скрипт для этого анализа?

Я пытался работать сизменения:

var dateFromFilename = file.getName().substr(0, 10);
    if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) {

Но вернул ошибку при попытке добавить дополнительный if ( status = 204) в качестве предупреждения об ошибке.

1 Ответ

1 голос
/ 24 октября 2019
  • Вы хотите удалить файлы, дата которых включена в имя файла, а дата меньше, чем сегодня.
  • Вы также хотите удалить файлы, дата которых НЕ включена в имя файла.
  • Вы хотите добиться этого, изменив сценарий.

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

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

  • В вашем скрипте оператор if if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) {} проверяет, включена ли дата в имя файла. Я думаю, что это может быть использовано для достижения вашей цели.

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

Пожалуйста, измените ваш скрипт следующим образом. Пожалуйста, подумайте об этом, как об одном из нескольких ответов.

С:
if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) {
  var date = new Date(dateFromFilename).getTime();
  if (date < today) {
    obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()});
  }
}
Кому:
if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) {
  var date = new Date(dateFromFilename).getTime();
  if (date < today) {
    obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()});
  }
} else {
  obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()});
}

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

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