0

我正在使用 Google 云端硬盘,我想存档所有与我的计算机同步的超过一定时间的文件。因此,存档文件将在下一次同步时从我的计算机中消失。

我找到了几个脚本来执行文件移动,但移动文件并保持路径结构似乎是在计算机上本地使用 robocopy/powershell 命令移动的,这似乎具有挑战性。

知道 Google Apps 脚本是否可以实现此类功能?

到目前为止,我还没有集成复制/删除功能。我正在检索文件夹路径,我想必须有一种方法来检查目标中是否已经存在路径,如果不存在,则创建子文件夹?

function FilesModifiedLastWeek(){

// Find files modified last week

  var today     = new Date();
  var oneDayAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);  
  var startTime = oneDayAgo.toISOString();

  // The magic search expression
  var search = '(trashed = true or trashed = false) and (modifiedDate > "' + startTime + '")';
  var files  = DriveApp.searchFiles(search);

  // Loop through all the files in the search results
  while( files.hasNext() ) {

    var file = files.next();

    var fileName    = file.getName();
    var parentFolder = file.getParents();
    folders = [];

    //Get full path
    while (parentFolder.hasNext()) {
      parentFolder = parentFolder.next();
      var title = parentFolder.getName();
      folders.push(parentFolder.getName());
      parentFolder = parentFolder.getParents();
    }
    var fileURL     = file.getUrl();
    var dateCreated =  Utilities.formatDate(file.getDateCreated(), "Europe/Zurich", "yyyy-MM-dd HH:mm");
    Logger.log("Filename: " + fileName + " Folder path: " + folders.reverse().join("/") + " File creation date:" + dateCreated);
  }
}

另外一点,这是从搜索中排除存档文件夹的一种方法吗?:)

4

1 回答 1

0

您可以通过高级驱动服务和代码中的一项额外功能来实现这一点。

我们将使用Patch 命令添加和删除父文件夹。

可选查询参数

addParents 字符串 要添加的父 ID 的逗号分隔列表。

removeParents string 要删除的父 ID 的逗号分隔列表。

代码是这样的:

function placeFileInFolders(file, folders) {
  var archiveFolder = DriveApp.getFoldersByName("Archive Folder").next();
  
  var lastFolder = archiveFolder;
  for (var i=0; i<folders.length; i++) {
    if (lastFolder.getFoldersByName(folders[i]).hasNext()) {
      lastFolder = lastFolder.getFoldersByName(folders[i]).next();
    } else {
      lastFolder = lastFolder.createFolder(folders[i]);
    }
  }
  var newFile = Drive.Files.patch({}, file.getId(), {
    addParents: lastFolder.getId(),
    removeParents: file.getParents().next().getId()
  });
}

你可以像这样使用它:

    //...
    Logger.log("Filename: " + fileName + " Folder path: " + folders.reverse().join("/") + " File creation date:" + dateCreated);
    placeFileInFolders(file, folders.reverse());
    //...

改进

与我分享

我还添加了一个额外的案例,您的代码将能够处理“与我共享”文件。

    //...
    if (!parentFolder.hasNext()) {
      folders.push("Shared With Me");
    }
    while (parentFolder.hasNext()) {
    //...

删除空文件夹

此脚本不会删除所有内容都已移至存档的文件夹。

于 2019-11-28T16:27:31.020 回答