4

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

4

3 回答 3

7

编辑:我查看了您的原始问题(编辑前),从那里我理解了您对 Google Drive 中文件和文件夹如何工作的困惑。

当您复制文件时,您会在根文件夹中获得一个新文件,当您将此新文件添加到另一个文件夹时,您必须将其视为在此文件上粘贴标签而不创建任何新副本。

您实际上可以在根文件夹和其他文件夹中看到该文件,但它是具有 2 个不同标签的相同文件!(你确实注意到了,因为你试图删除它并看到它在两个地方都被删除了)

您唯一需要做的就是在其文件夹中获取新文件而不显示在根目录中以删除“根标签”。

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

因此,将 Google Drive 视为一个(非常)大的磁盘单元,其中包含数十亿个您无法移动的文件,但您可以在其上粘贴任意数量的标签;-)(最重要的标签是您的 Google 帐户 ID!)

在您描述的情况下使用这些标签只需尝试这个简单的功能:

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
}

要对其进行测试,只需使用 2 个必需参数:您可以从许多不同方法中获取的file对象和对象,请参阅DocsList 文档以获取有关如何获取它的详细信息(如果需要),但我想您已经知道了 ;-)folder

于 2013-03-29T17:39:08.410 回答
7

在新版本的谷歌应用程序脚本中,您需要完成以下任务:

file.makeCopy("new name", folder);
于 2017-08-26T17:15:44.930 回答
3

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

// 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;
}

基本上,像这样使用它:

var file = DocsList.getFileById(fileID);
var folder = DocsList.getFolder('Some folder name');

// Make a backup copy.
var file2 = file.makeCopy('BACKUP ' + Utilities.formatDate(new Date(), Session.getTimeZone(), 'yyyy-MM-dd') + '.' + file.getName());
// Move the backup file.
if (moveFileTo(file2, folder)) {
  ...

我应该注意到,这个简单的功能就是……简单。它假设您可以破坏所有父文件夹 - 拥有或共享。如果您不小心,这可能会对各种用户的各种共享文件夹中的共享文件产生意想不到的后果。但是,似乎不会删除不与该脚本的用户共享的父文件夹——这很好。无论如何,更好地控制事物的一种明显替代方法是指定“from”文件夹以及“to”文件夹。

于 2013-03-27T15:20:16.297 回答