Google apps script 使用应用程序脚本将文件从一个文件夹复制到另一个文件夹时,任何;应用程序脚本“;被复制的文件最终会出现在MyDrive中,而不是指定的文件夹中-为什么?

Google apps script 使用应用程序脚本将文件从一个文件夹复制到另一个文件夹时,任何;应用程序脚本“;被复制的文件最终会出现在MyDrive中,而不是指定的文件夹中-为什么?,google-apps-script,file-copying,Google Apps Script,File Copying,我使用此应用程序脚本制作一些文件的备份副本: var sourceFolderId = "xxxxxx"; var sourceFolder = DriveApp.getFolderById(sourceFolderId); var latestFiles = sourceFolder.getFiles(); var backupFolderId = "yyyyyy"; var backupFolder = DriveApp.getFolderById(backupFolderId); whi

我使用此应用程序脚本制作一些文件的备份副本:

var sourceFolderId = "xxxxxx";
var sourceFolder = DriveApp.getFolderById(sourceFolderId);
var latestFiles = sourceFolder.getFiles();
var backupFolderId = "yyyyyy";
var backupFolder = DriveApp.getFolderById(backupFolderId);

while(latestFiles.hasNext()) {
 var file = latestFiles.next();
 file.makeCopy(backupFolder);
}
它工作正常-将所有文件从源文件夹复制到备份文件夹-除非任何被复制的文件是“谷歌应用程序脚本”文件,它不会将其复制到备份文件夹,而是将其复制到“我的驱动器”

然后我必须将它从“我的驱动器”移动到所需的文件夹。我可以用一个脚本来做这件事,但我不明白它为什么要这么做

我是所有文件和文件夹的所有者

你知道为什么吗


谢谢

同样在我的环境中,我与你确认了同样的情况。只有Google Apps脚本无法复制到备份文件夹。我认为这可能是一个错误。所以我想到了解决这种情况的办法。我测试的模式如下

  • 尝试使用
    addFile()
    removeFile()
    将复制的GAS文件从“我的驱动器”移动到备份文件夹。
    • 可以添加备份文件夹的父ID。但无法删除“我的驱动器”的父ID。
      • 失败
  • 尝试使用高级Google服务的
    Drive.files.copy
    复制GAS文件。
    • 复制的GAS文件将创建到“我的驱动器”。这与
      makeCopy()
      相同。
      • 失败
  • 尝试使用高级Google服务的
    Drive.files.update
    将复制的GAS文件从“我的驱动器”移动到备份文件夹。
    • 父ID可以从“我的驱动器”更改为备份文件夹。
      • 成功
  • 修改脚本: 在此修改后的脚本中,使用
    Drive.files.update
    将Google Apps脚本文件从“我的驱动器”移动到备份文件夹

    var sourceFolderId = "xxxxxx";
    var sourceFolder = DriveApp.getFolderById(sourceFolderId);
    var latestFiles = sourceFolder.getFiles();
    var backupFolderId = "yyyyyy";
    var backupFolder = DriveApp.getFolderById(backupFolderId);
    
    while(latestFiles.hasNext()) {
      var file = latestFiles.next();
      var res = file.makeCopy(backupFolder); // Modified
      if (file.getMimeType() == MimeType.GOOGLE_APPS_SCRIPT) { // Added
        Drive.Files.update({"parents": [{"id": backupFolderId}]}, res.getId()); // Added
      }
    }
    
    注: 为了使用这个修改过的脚本,请在高级Google服务和API控制台上启用驱动API,如下所示

    在高级Google服务中启用驱动器API v2
    • 关于脚本编辑器
      • 资源->高级谷歌服务
      • 打开驱动器API v2
    • 关于脚本编辑器
      • 资源->云平台项目
      • 查看API控制台
      • 开始时,单击启用API并获取密钥等凭据
      • 在左侧,单击“库”
      • 在搜索API和服务时,输入“驱动器”。然后单击驱动API
      • 单击启用按钮
      • 如果API已经启用,请不要关闭
    参考资料:

    如果我误解了你的问题,我很抱歉。

    嗨。这是一个很好的解决办法。我使用的是遍历所有MyDrive文件并使用.addFile和.removeFile,但您的文件更整洁。我很高兴这不仅仅是我一个人——大概是一个bug。@pea先生,我可以从你的问题中了解到这种情况。谢谢。对于使用此更新方法在团队驱动文件夹中创建google文档文件,您有什么建议吗?我已经在API浏览器中尝试过了,但我不知道如何在GoogleApps脚本中实现语法。