Проблема сравнения дублированных файлов на Google Диске с GAS - PullRequest
2 голосов
/ 18 апреля 2020

Я ожидал, что нижеуказанный GAS удалит файлы с таким же именем в заданной папке. L oop внутри другого l oop должен сравнивать все файлы со всеми файлами, но это не так.

Поскольку в папке 5 файлов, сценарий должен выполнить сравнения 5x5, но он выполняет только 5. Где моя вина?

код:

function setTrashedDuplicatedFiles(){
  var folder = DriveApp.getFolderById("1FfbNvPQpg6Ilx-5VLuSIePvpl-FxewFl");
  var files = folder.getFiles();
  var files_ = folder.getFiles();

  while (files.hasNext())
  { 
    var file = files.next()
    while (files_.hasNext())
    {
      var file_ = files_.next()
      Logger.log("file: " + file + " = " + "file_: " + file_)
      Logger.log("file.getId(): " + file.getId() + " = " + "file_.getId(): " + file_.getId())
      if((file === file_) && (file.getId() != file_.getId()))
      {
        file.setTrashed(true)
      }
    }
  }
}

Токовый выход:

file: File1.pdf = file_: File1.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA
file: File1.pdf = file_: File2.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1LY68d1aP9DLe5LqkzZyCJVdQIAm9XzzY
file: File1.pdf = file_: File2.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 19tKdBNt5bzxAOfcO1n14a_DbjWLb-LN-
file: File1.pdf = file_: File1.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1Quwyi6WIP0dt3qgV4S5XJof1wMu9mRP1
file: File1.pdf = file_: File1.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1fjMu1NEJu9ZI3aFhYpFyLkw_o79KiTQa

1 Ответ

3 голосов
/ 18 апреля 2020
  • Вы хотите переместить файл в поле tra sh, когда дублируется имя файла.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Точки изменения:

  • В вашем скрипте объект файла сравнивается вместо имени файла, например file === file_. В этом случае оператор if всегда false. Чтобы сравнить имя файла, используйте (file.getName() === file_.getName()). Это уже упоминалось Комментарий TheMaster .
  • getFiles() возвращает FileIterator. В этом случае ваш второй, пока l oop, равен только одному l oop. Таким образом, ваш скрипт не может удалить файлы с дублированным именем файла. Поэтому я хотел бы предложить следующий пример сценария.

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

Как и другой шаблон, как насчет следующего сценария? В этом случае используется один l oop. Таким образом, стоимость процесса может быть снижена по сравнению с вышеописанным измененным сценарием.

function setTrashedDuplicatedFiles(){
  var folder = DriveApp.getFolderById("1FfbNvPQpg6Ilx-5VLuSIePvpl-FxewFl");
  var files = folder.getFiles();

  let fileObj = {};
  while (files.hasNext()) {
    const file = files.next();
    const filename = file.getName();
    if (filename in fileObj) {
      file.setTrashed(true);
    } else {
      fileObj[filename] = file;
    }
  }
}

Ссылка:

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