如何编写删除文件的 Google Apps 脚本?
这会找到文件:
var ExistingFiles = DocsList.find(fileName);
但DocsList.deleteFile
不存在删除文件。
有没有办法将这些文件移动到另一个文件夹或垃圾箱?
我会考虑的另一个解决方法是能够覆盖具有相同名称的现有文件。
目前,当我想创建一个名称已在 MyDrive 中使用的文件时,它会创建另一个同名的文件。我想保留 1 个文件(新文件被保留,旧文件丢失)。
如何编写删除文件的 Google Apps 脚本?
这会找到文件:
var ExistingFiles = DocsList.find(fileName);
但DocsList.deleteFile
不存在删除文件。
有没有办法将这些文件移动到另一个文件夹或垃圾箱?
我会考虑的另一个解决方法是能够覆盖具有相同名称的现有文件。
目前,当我想创建一个名称已在 MyDrive 中使用的文件时,它会创建另一个同名的文件。我想保留 1 个文件(新文件被保留,旧文件丢失)。
有 3 种服务可用于删除文件。
UrlFetchApp.fetch(url,options)
该DocsList
服务现已弃用。
高级驱动器服务可用于删除文件而不将其发送到垃圾箱。认真考虑无法找回已删除文件的风险。高级驱动器服务有一种remove
方法可以删除文件而不将其发送到垃圾文件夹。高级服务具有许多与 API 相同的功能,无需发出 HTTPS GET 或 POST 请求,也不需要 OAuth 库。
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,您需要通过Resources , Advanced Google Services菜单添加它。将 Drive API 设置为ON。 并确保在您的 Google Cloud Platform 中启用 Drive API。如果在这两个地方都没有打开它,它将不可用。
现在,如果文件是电子表格、文档等,您可以使用以下内容:
DriveApp.getFileById(spreadsheet.getId()).setTrashed(true);
或者如果您已经有了文件而不是电子表格、文档等,您可以使用:
file.setTrashed(true);
此代码使用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 循环来获取文档数组中的所有文档,并在必要时将它们一一删除。
我使用了一个以文件名作为参数的函数来简化它在脚本中的使用,使用测试函数来尝试它。
注意:请注意,所有具有此名称的文件都将被丢弃(并且可恢复;-)
关于您关于保留最新文件和删除旧文件的问题的最后一部分,这是可行的(通过读取上次访问的日期和时间),但我认为在创建新文件之前删除旧文件是一个更好的主意同名...更加合乎逻辑和安全!
虽然服务 DocsList 现在已被弃用,但从类文件夹引用中,settrashed 方法仍然有效:
https://developers.google.com/apps-script/reference/drive/folder#settrashedtrashed
所以应该这样工作:
ExistingFiles.settrashed(true);
这是另一种不需要 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);
}
}