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

时间:2018-04-24 15:21:35

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

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

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云端硬盘的Web界面移动文件时,这种情况不会发生。

1 个答案:

答案 0 :(得分:1)

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

适用于Drive API v2
  • 我们发现,使用drive.files.updatedrive.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。
  • 这是一个简单的示例脚本。因此,如果您想移动大量文件,我建议使用批处理请求。

参考:

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