首页 > 解决方案 > 当 Google Apps 脚本将文件移动到其他文件夹时,云端硬盘文件的修改日期会发生变化

问题描述

我正在以这种方式移动文件:

var idOriginFolder = 'ABCDEFG12345abcdefg';
var originFolder = DriveApp.getFolderById(idOriginFolder);
var destinationFolder = DriveApp.createFolder('New Folder');
var searchString = '"'+idOriginFolder+'" in parents'
var foundFiles = DriveApp.searchFiles(searchString);
while (foundFiles.hasNext()){
 var file = foundFiles.next();
 destinationFolder.addFile(file);
 originFolder.removeFile(file);
}

文件被正确移动,但是每个移动文件的修改日期都更改为脚本执行日期。你知道有什么方法可以避免这种情况吗?当我通过 Google Drive 的 Web 界面移动文件时,不会发生这种情况。

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

解决方案


根据我的经验,文件的修改日期不会通过使用 Drive API v3 移动而改变。在您的问题中,当使用 DriveApp 移动文件时,修改日期已更改。我认为 DriveApp 使用 Drive API v2。所以我对此进行了调查,因为我对这种情况感兴趣。

对于 Drive API v2
  • 发现使用drive.files.update和移动文件时drive.files.patch,修改日期发生了变化。
对于 Drive API v3
  • 发现使用 移动文件时drive.files.update,修改日期没有改变。

示例脚本:

使用 Drive API v3 的示例脚本如下。

var idOriginFolder = 'ABCDEFG12345abcdefg';
var destinationFolder = DriveApp.createFolder('New Folder').getId();
var searchString = '"'+idOriginFolder+'" in parents'
var foundFiles = DriveApp.searchFiles(searchString);
var requests = [];
while (foundFiles.hasNext()){
  var file = foundFiles.next();
  requests.push({
    url: "https://www.googleapis.com/drive/v3/files/" + file.getId() + "?addParents=" + destinationFolder + "&removeParents=" + idOriginFolder,
    method: "patch",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true,
  });
}
var res = UrlFetchApp.fetchAll(requests);
Logger.log(res)

笔记 :

  • 从这些结果可以认为,通过 Web Interface 移动文件可能是由于 Drive API v3。
  • 这是一个简单的示例脚本。所以如果你想移动很多文件,我建议使用批处理请求。

参考 :

如果这对你没有用,我很抱歉。


推荐阅读