Google apps script : How to Delete a File in Google Drive?

主宰稳场 提交于 2019-11-30 08:34:31

The DocsList service is now deprecated. This answer uses the newer DriveApp service.

There is a way to delete a file without sending it to the trash. You may want to delete a file without sending it to the trash, in order to avoid emptying the trash folder later. The Advanced Drive Service has a remove method which removes a file without sending it to the trash folder. Advanced services have the same capabilities as the API's, without needing to make an HTTPS GET or POST request.

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);
  };
};

This combines the DriveApp service and the Drive API to delete the file without sending it to the trash. The Drive API method .remove(id) needs the file ID. If the file ID is not available, but the file name is, then the file can first be looked up by name, and then get the file ID.

In order to use DriveAPI, you need to add it through the Resources, Advanced Google Services menu. Set the Drive API to ON. AND make sure that the Drive API is turned on in your Google Developers Console. If it's not turned on in BOTH places, it won't be available.

Serge insas

This code uses the DocsList Class which is now deprecated.

try this :

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)
      }
     }
    }

since you can have many docs with the same name I used a for loop to get all the docs in the array of documents and delete them one by one if necessary.

I used a function with the filename as parameter to simplify its use in a script, use test function to try it.

Note : be aware that all files with this name will be trashed (and recoverable ;-)

About the last part of your question about keeping the most recent and deleting the old one, it would be doable (by reading the last accessed date & time) but I think it is a better idea to delete the old file before creating a new one with the same name... far more logical and safe !

Now you may use the following if the file is as a spreadsheet, doc etc.:

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

or if you already have the file instead of a spreadsheet, doc etc. you may use:

file.setTrashed(true);

Though the The service DocsList is now deprecated, as from the Class Folder references, the settrashed method is still valid:

https://developers.google.com/apps-script/reference/drive/folder#settrashedtrashed

So should work simply this:

ExistingFiles.settrashed(true);

Here is another way to do it without the need of Drive API. (based on Allan response).

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);
  }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!