Приложения Google script: как удалить файл на Google Диске?

Как написать скрипт Google Apps, который удаляет файлы?

Это находит файлы:

var ExistingFiles = DocsList.find(fileName);

Но DocsList.deleteFile не существует для удаления файла.

Есть ли способ переместить эти файлы в другую папку или в корзину?

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

В настоящее время, когда я хочу создать файл с именем, уже используемым в MyDrive, он создает второй файл с тем же именем. Я хотел бы сохранить 1 файл (новый сохраняется, а старый теряется).

Ответ 1

Служба DocsList устарела. Этот ответ использует более DriveApp службу DriveApp.

Есть способ удалить файл, не отправляя его в корзину. Возможно, вы захотите удалить файл, не отправляя его в корзину, чтобы впоследствии не очистить папку корзины. У расширенной службы накопителей есть метод remove который удаляет файл, не отправляя его в корзину. Расширенные сервисы имеют те же возможности, что и API, без необходимости запрашивать HTTPS GET или POST.

function delteFile(myFileName) {
  var allFiles, idToDLET, myFolder, rtrnFromDLET, thisFile;

  myFolder = DriveApp.getFolderById('Put_The_Folder_ID_Here');

  allFiles = myFolder.getFilesByName(myFileName);

  while (allFiles.hasNext()) {//If there is another element in the iterator
    thisFile = allFiles.next();
    idToDLET = thisFile.getId();
    //Logger.log('idToDLET: ' + idToDLET);

    rtrnFromDLET = Drive.Files.remove(idToDLET);
  };
};

Это объединяет сервис DriveApp и Drive API для удаления файла без отправки его в корзину. Для метода Drive API .remove(id) требуется идентификатор файла. Если идентификатор файла недоступен, но имя файла есть, тогда файл можно сначала найти по имени, а затем получить идентификатор файла.

Чтобы использовать DriveAPI, необходимо добавить его через меню " Ресурсы", " Расширенные службы Google". Установите для Drive API значение ON. И убедитесь, что Drive API включен в вашей консоли разработчиков Google. Если он не включен в обоих местах, он не будет доступен.

Ответ 2

В этом коде используется класс DocsList, который теперь устарел.

попробуйте следующее:

function test(){
deleteDocByName('Name-of-the-file-to-delete')
}

function deleteDocByName(fileName){
  var docs=DocsList.find(fileName)
    for(n=0;n<docs.length;++n){
     if(docs[n].getName() == fileName){
      var ID = docs[n].getId()
      DocsList.getFileById(ID).setTrashed(true)
      }
     }
    }

так как у вас может быть много документов с тем же именем, я использовал цикл for для получения всех документов в массиве документов и при необходимости удалял их один за другим.

Я использовал функцию с именем файла как параметром, чтобы упростить его использование в script, использовать тестовую функцию, чтобы попробовать.

Примечание: помните, что все файлы с таким именем будут уничтожены (и восстановлены; -)

О последней части вашего вопроса о сохранении самого последнего и удалении старого, это было бы выполнимо (читая последнюю доступную дату и время), но я думаю, что это лучшая идея для удаления старого файла перед созданием нового с тем же именем... гораздо более логичным и безопасным!

Ответ 3

Теперь вы можете использовать следующее, если файл является таблицей, doc и т.д.:

 DriveApp.getFileById(spreadsheet.getId()).setTrashed(true);

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

file.setTrashed(true);

Ответ 5

Вот еще один способ сделать это без необходимости Drive API. (на основе ответа Аллана).

function deleteFile(fileName, folderName) {
  var  myFolder, allFiles, file;
  myFolder = DriveApp.getFoldersByName(folderName).next();

  allFiles = myFolder.getFilesByName(fileName);

  while (allFiles.hasNext()) {
    file = allFiles.next();
    file.getParents().next().removeFile(file);
  }
}