Google应用脚本:如何删除Google云端硬盘中的文件?

时间:2013-01-09 16:01:00

标签: file google-apps-script google-drive-api delete-file

如何编写删除文件的Google Apps脚本?

找到文件:

var ExistingFiles = DocsList.find(fileName);

但删除文件时不存在DocsList.deleteFile

有没有办法将这些文件移动到另一个文件夹或垃圾箱?

我要考虑的其他解决方法是能够覆盖具有相同名称的现有文件。

目前,当我想创建一个已在MyDrive中使用的名称的文件时,它会创建一个具有相同名称的第二个文件。我想保留1个文件(新文件保留,旧文件丢失)。

5 个答案:

答案 0 :(得分:13)

DocsList服务现已弃用。此答案使用较新的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)需要文件ID。如果文件ID不可用,但文件名是,则可以先按名称查找文件,然后获取文件ID。

要使用DriveAPI,您需要通过资源高级Google服务菜单添加它。将Drive API设置为开启 AND 确保您的Google Developers Console中已启用Drive API。如果它未在 BOTH 位置启用,则无法使用。

答案 1 :(得分:7)

此代码使用现已弃用的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循环来获取文档数组中的所有文档,并在必要时逐个删除它们。

我使用了一个带有文件名作为参数的函数来简化它在脚本中的使用,使用测试函数来尝试它。

注意:请注意,具有此名称的所有文件都将被删除(并且可以恢复; - )

关于问题的最后一部分关于保留最新部分和删除旧部分,这将是可行的(通过阅读上次访问的日期和时间),但我认为这是更好的想法在创建一个具有相同名称的新文件之前删除旧文件......更加合乎逻辑且安全!

答案 2 :(得分:5)

现在,如果文件是电子表格,doc等,您可以使用以下内容:

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

或者如果您已经拥有该文件而不是电子表格,文档等,则可以使用:

file.setTrashed(true);

答案 3 :(得分:3)

虽然现在不推荐使用服务DocsList,但是从类文件夹引用中,settrashed方法仍然有效:

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

所以应该这样做:

ExistingFiles.settrashed(true);

答案 4 :(得分:0)

这是不需要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);
  }
}