google-apps-script - 当 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 界面移动文件时,不会发生这种情况。
解决方案
根据我的经验,文件的修改日期不会通过使用 Drive API v3 移动而改变。在您的问题中,当使用 DriveApp 移动文件时,修改日期已更改。我认为 DriveApp 使用 Drive API v2。所以我对此进行了调查,因为我对这种情况感兴趣。
对于 Drive API v2- 发现使用
drive.files.update
和移动文件时drive.files.patch
,修改日期发生了变化。
- 发现使用 移动文件时
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。
- 这是一个简单的示例脚本。所以如果你想移动很多文件,我建议使用批处理请求。
参考 :
如果这对你没有用,我很抱歉。
推荐阅读
- c# - 使用 MathNet 库沿三次样条插值
- laravel - Laravel 和 MongoDB 登录连接错误“找不到合适的服务器”(在本地服务器上中断,在产品上工作)
- io - 可以在控制台输入上 deno emmit 事件吗?
- windows - 使用未解析的变量或脚本参数创建脚本(如“%~dp0”)
- vue.js - 如何在 vue 模板中使用异步功能?
- r - 在 geom_text() 的分组文本中插入返回
- html - HTML - 一个溢出的、相对定位的子元素在它的父元素中创建了额外的空间
- python - 如何从 Kivy 的 ScreenManager 访问 id 并通过主应用程序类处理它们?
- php - 无法在非身份验证应用程序中显示会话变量
- typescript - 类型“Type[T]”上不存在属性“key”