我有一个应用程序脚本项目,用于从具有特定标签的电子邮件中提取附件,并根据文件名将它们放入 Google Drive 上相应的子文件夹中。
一切都在无缝运行,直到最近,当我偶尔将文件错误地放入主 Google 云端硬盘文件夹中时。该脚本每 5 分钟运行一次,因此这些文件最终也会被放置在正确的位置。
我正在寻找一种简单的解决方案,可以通过调整代码来阻止它错误地将这些附件添加到主驱动器文件夹中,或者添加额外的代码部分来浏览主驱动器文件夹并删除匹配的文件 pdf 文件。
下面是我正在使用的代码:
function saveAttachments() {
var searchQuery = 'label:sign-ins is:unread has:attachment newer_than:1h'; // search query for Gmail messages
var label = GmailApp.getUserLabelByName('sign-ins'); // label for marking processed messages
var parentFolder = DriveApp.getFoldersByName('** SIGN INS **').next(); // parent folder for saving attachments
var threads = GmailApp.search(searchQuery);
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var attachments = messages[j].getAttachments();
for (var k = 0; k < attachments.length; k++) {
var attachment = attachments[k];
var filename = attachment.getName();
var subject = messages[j].getSubject();
var folderName = subject.replace(/A filled document|has been submitted to you with pdfFiller LinkToFill./gi, '').trim();
if (folderName) {
var folder = getOrCreateSubfolder(parentFolder, folderName);
var existingFiles = folder.getFilesByName(filename);
if (!existingFiles.hasNext()) {
var file = folder.createFile(attachment);
label.addToThread(threads[i]);
}
}
}
messages[j].markRead();
}
}
function getOrCreateSubfolder(parentFolder, folderName) {
var folders = parentFolder.getFoldersByName(folderName);
if (folders.hasNext()) {
return folders.next();
} else {
return parentFolder.createFolder(folderName);
}
}
}
对于变量父文件夹,您可以尝试在代码中手动设置folderID,而不是使用名称搜索。如果您导入的文件夹是静态文件夹。
var folderId = "R8puyP1llQazAylcFP9PHAc65xOdxYJ"; // Replace with your folder ID
var parentfolder = DriveApp.getFolderById(folderId);
您可以通过查看窗口顶部的驱动器文件夹 HTML 链接来找到您的文件夹 ID,您将在末尾看到您的文件夹 ID
https://drive.google.com/drive/u/0/folders/R8puyP1llQazAylcFP9PHAc65xOdxYJ
如果这对您有用,请告诉我或接受我的答案! 谢谢你。