【问题标题】:In Google-App-Script for Google Drive how do I move certain files from root to a certain folder if their title includes a certain word?在 Google Drive 的 Google-App-Script 中,如果标题包含某个单词,我如何将某些文件从根目录移动到某个文件夹?
【发布时间】:2019-04-29 04:44:26
【问题描述】:

如果标题包含某个单词,我想使用 Google-App-Script 将某些文件移动到特定文件夹中

我尝试过类似的方法,但错误消息指出该方法未定义。任何指针/建议?

这是我的代码:

function myFunction() {
    var searchFor ='title contains "Copyright"';
    var names =[];
    var files = DriveApp.searchFiles(searchFor);
    var destination = DriveApp.getFolderById("1xN0AUclE2t9yqlNzTwgRup3nn7G0Qsik");
    while (files.hasNext()) {
        files.next().destination.addFile(file);
}

}

【问题讨论】:

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


    【解决方案1】:

    您似乎没有在代码中的任何位置定义“文件”变量。

    您可以在 while 循环中定义它,或者将 files.next() 作为参数传递给 addFile()。

    最后,你应该从第 7 行的开头删除 files.next(),因为这个链接不正确,很可能会导致你的错误!

    另外,请注意,该文件不会从其原始文件夹中删除,但可以从两个位置访问。如果您想从原始位置删除文件,请告诉我,我将编辑我的代码以添加此文件。

    试试这个:

    function myFunction() {
      var searchFor ='title contains "Copyright"';
      var names =[];
      var files = DriveApp.searchFiles(searchFor);
      var destination = DriveApp.getFolderById("1xN0AUclE2t9yqlNzTwgRup3nn7G0Qsik");
      while (files.hasNext()) {
        var file = files.next();
        destination.addFile(file);
      }
    }
    

    或者这个:

    function myFunction() {
      var searchFor ='title contains "Copyright"';
      var names =[];
      var files = DriveApp.searchFiles(searchFor);
      var destination = DriveApp.getFolderById("1xN0AUclE2t9yqlNzTwgRup3nn7G0Qsik");
      while (files.hasNext()) {
        destination.addFile(files.next());
      }
    }
    

    【讨论】:

    • 非常感谢,马克西姆·芒格,你的摇滚——成功了:-)!
    • 嗨,Maxime,如果我想要文件,一旦它们被复制到目标文件夹,从源文件夹中删除,代码是什么?
    【解决方案2】:

    请注意,您的代码并没有按照您说的那样做。也就是说,它实际上并没有将文件从根文件夹“移动”到指定的文件夹(如果这是您想要完成的)。

    在 Google 云端硬盘中,文件夹和文件可以有多个父级。将文件夹视为应用于文件和其他文件夹的“标签”。调用 Folder 类的 addFile(file) 方法会将文件添加到新文件夹,但该文件也将保留在其原始父文件夹中。

    这可能会导致问题,因为您可能会不小心将文件从其中一个文件夹中删除,并认为它是副本,而实际上它是存储在多个文件夹中的同一个文件。

    由于没有直接的方法可以将文件“移动”到 Google 云端硬盘中的另一个文件夹,因此实际过程包括 2 个步骤。

    获取文件的父文件夹列表:

    var folderIterator = file.getParents();   
    

    将文件添加到目标文件夹并将其从之前保存的父文件夹中删除

    targetFolder.addFile(file);
    
    //Remove from parents
    while (folderIterator.hasNext()) {    
     folderIterator.next().removeFile(file);  
    }
    

    【讨论】:

    • 谢谢,Anton,这绝对有帮助,非常感谢!
    • @Christian 很高兴听到这个消息。这里的任何答案都解决了您的问题吗?
    • 部分 - 它发现了问题,Maxime Munger 提供了一个很好的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多