Google apps script 如何复制&;将文件移动到Google应用程序脚本中的文件夹?

Google apps script 如何复制&;将文件移动到Google应用程序脚本中的文件夹?,google-apps-script,move,Google Apps Script,Move,是否有一种方法可以复制和重命名文件,并将该副本移动到特定文件夹,而不必在根文件夹中添加第二个副本?我使用了不同顺序的复制、重命名和移动组合,但每次都会得到重命名文件的副本根驱动器。这是默认的吗?至少可以说这很烦人。是的,谷歌没有提供移动方法有点奇怪。但是,考虑到驱动器是如何工作的,并且一个文件可以属于多个文件夹,您编写自己的移动是有道理的。下面是我编写的一个简单的移动函数: // Moves a file to a new folder by removing all current // pa

是否有一种方法可以复制和重命名文件,并将该副本移动到特定文件夹,而不必在根文件夹中添加第二个副本?我使用了不同顺序的复制、重命名和移动组合,但每次都会得到重命名文件的副本根驱动器。这是默认的吗?至少可以说这很烦人。

是的,谷歌没有提供移动方法有点奇怪。但是,考虑到驱动器是如何工作的,并且一个文件可以属于多个文件夹,您编写自己的移动是有道理的。下面是我编写的一个简单的移动函数:

// Moves a file to a new folder by removing all current
// parent folders and then adding the new one.
function moveFileTo(fileObj, folderObj) {
  // Attempt the move only if folderObj has a value.
  // Otherwise, the file will be left without a folder.
  // (Lost files can be found in the "All items" area.)
  if (folderObj) {
    var folders = fileObj.getParents();
    for (var i = 0; i < folders.length; i++) {
      fileObj.removeFromFolder(folders[i]);
    }
    fileObj.addToFolder(folderObj);
    return true;
  }
  return false;
}

我应该注意到这个简单的函数正是。。。简单。它假设您可以处理所有的父文件夹——所有的或共享的。如果不小心,这可能会对不同用户的不同共享文件夹中的共享文件产生意外后果。但是,似乎不需要删除未与此脚本的用户共享的父文件夹,这很好。无论如何,一个明显的更好地控制事情的替代方法是指定“from”文件夹和“to”文件夹。

编辑:我看了一下你原来的问题(编辑之前),从那里我理解了你对文件和文件夹在Google Drive中如何工作的困惑

当你复制一个文件的拷贝时,你会在根文件夹中得到一个新文件,当你把这个新文件添加到另一个文件夹时,你必须把它看作是在这个文件上粘贴标签而不创建任何新的拷贝。 实际上,您可以在根文件夹和其他文件夹中看到该文件,但是它是一个具有两个不同标签的完全相同的文件(您确实注意到,由于您试图删除它,并且看到它在两个位置都被删除了)

您要做的唯一一件事是将新文件放在其文件夹中,而不是显示在根目录中,然后删除“根标签”

这就是谷歌硬盘的工作原理。当您仔细考虑并与本地硬盘存储进行比较时,它变得合乎逻辑:当您将文件从同一逻辑驱动器上的一个文件夹移动到另一个文件夹时,您不会移动数据(即磁盘上的字节),而只是告诉磁盘操作系统该文件在地图上的其他位置

因此,将谷歌驱动器视为一个(非常)大的磁盘单元,拥有数十亿个文件,这些文件不能移动,但在上面你可以贴上你想要的标签;(最重要的标签是你的谷歌账号!)

要在您描述的情况下使用这些标签,请尝试以下简单功能:

function copyAndMove(file,folder){
var newfile=file.makeCopy('copy of '+file.getName());// here you can define the copy name the way you want...
newfile.addToFolder(folder);//  add the copy to the folder
newfile.removeFromFolder(DocsList.getRootFolder());// and remove it from your root folder
}

要测试它,只需使用两个必需的参数:
文件
对象和可以从许多不同方法获得的
文件夹
对象,有关如何获得它的详细信息,请参阅,如果需要,但我想您已经知道;-)

在新版google apps脚本中,完成任务所需的全部内容如下:

file.makeCopy("new name", folder);

使用
file.makeCopy
时,新创建的文件位于根文件夹中,因此您不需要所有这些
getParents
内容。保持简单;-)@Sergeinsas你假设我写这个函数只是为了移动新的副本。永远不要假设任何东西。我没有假设任何东西:你写了“像这样使用它…制作一个备份副本…”@Sergeinsas你以为我为那个代码示例编写了那个函数。在该代码示例之前,该函数还存在其他用途。但是,好的,我同意你的评论是正确的,有一个更简单的方法来满足要求。谢谢你的回答也帮助了我。我想知道到底发生了什么,为什么有两份。我希望我去学校是为了这种事。
file.makeCopy("new name", folder);