【问题标题】:Modify Google App Script - Gmail to Google Drive修改 Google App 脚本 - Gmail 到 Google Drive
【发布时间】:2018-11-09 07:12:12
【问题描述】:

我正在尝试修改此处找到的此脚本: https://github.com/ahochsteger/gmail2gdrive

我需要脚本来检查该文件是否已存在于 Google Drive 上,如果不存在,则创建它。目前,该脚本只是将文件创建到 Google Drive 中,而不检查是否已经存在同名的现有文件。

我不是程序员,我对 Google App Script 一无所知(尽管我已经设法设置并让它运行),我对 JavaScript 一无所知。我只是想知道是否有人可以为我指明正确的方向或帮助我编写我需要的这一功能?

据我了解(我可能是错的),附件是根据代码中的这一行创建的:

var file = folder.createFile(attachment);

然后我尝试在 createFile 之前添加这个:

var file = folder.removeFile(attachment);

我的逻辑是,如果文件夹中存在文件,则在创建之前先将其删除(因此避免重复文件)。但这没有用。

【问题讨论】:

    标签: google-apps-script google-drive-api gmail


    【解决方案1】:

    从你提问的GitHub的脚本中,发现attachment是blob。那么如何使用这个文件名呢?我认为您的情况有几种解决方案。因此,请将此视为其中之一。示例脚本流程如下。

    1. 检索 blob 的文件名。
    2. 使用 getFilesByName() 检索 FileIterator。
    3. 如果FileIterator有值,说明同名文件已经存在。
    4. 如果FileIterator没有值,则表示不存在同名文件。

    示例脚本如下。

    示例脚本 1:

    如果您只想在不存在相同文件名的文件时创建新文件,可以使用以下脚本。

    var fileName = attachment.getName();
    var f = folder.getFilesByName(fileName);
    var file = f.hasNext() ? f.next() : folder.createFile(attachment);
    

    示例脚本 2:

    如果你想在相同文件名的文件存在的情况下做一些事情,你可以使用下面的脚本。

    var fileName = attachment.getName();
    var f = folder.getFilesByName(fileName);
    var file;
    if (f.hasNext()) {
      // If the file has already been existing, you can do something here.
    } else {
      //  If the file is not existing, you can do something here.
      file = folder.createFile(attachment);
    }
    

    注意:

    • 根据您的问题,从文件夹中搜索文件。如果你想从所有文件中搜索文件,请告诉我。

    参考资料:

    如果这不是你想要的,请告诉我。我想修改它。

    【讨论】:

    • 非常感谢!第一个示例脚本非常适合我。我已经有了前两行,但只是错过了最后一行。我对 JavaScript 知之甚少,也不太明白第 3 行是做什么的,但如果我猜的话,它猜测它会将当前正在处理的附件的名称与在Google Drive 文件夹,如果 value 返回 False(即 Google Drive 中不存在),则在 Google Drive 中创建附件?
    • 另外,我在搞乱“DriveApp.getRootFolder().searchFiles()”,无法让它工作。我想我会使用 searchFiles 在 Google Drive 上查找文件,然后与正在处理的当前附件进行比较(几乎是您的第一个示例脚本正在执行的操作)。我想我需要开始更多地学习 JavaScript!无论如何,再次感谢!
    • @shadowz1337 感谢您的回复。我很高兴你的问题得到了解决。关于第一个脚本的第 3 行,它是三元运算符。您可以在here查看详细信息。我认为你的理解是正确的。当f.hasNext() 为真(存在相同的文件名)时,文件由f.next() 返回。如果为 false,则创建新文件。
    • @shadowz1337 你也可以使用searchFiles()。使用searchFiles()时,请将var f = folder.getFilesByName(fileName)修改为var f = folder.searchFiles("title = '" + fileName + "'")。这样,可以获得相同的结果。如果您想进行其他搜索,您可以在here查看文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2020-06-18
    • 2014-03-05
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多