google-apps-script - 使用 Apps 脚本将文件从一个文件夹复制到云端硬盘上的另一个文件夹
问题描述
团队成员将内容(无论文件类型如何)上传到云端硬盘上的文件夹中。我需要使用触发器自动将此内容复制到另一个文件夹中,并能够从那里移动它。
我不能使用“MoveFile”功能,因为我不是原始内容的所有者。
我已经尝试将文件自动复制到目标文件夹中,并且可以使用以下代码:
function CopyFiles() {
var srcFldr = DriveApp.getFolderById("***ID***");
var srcFiles = srcFldr.getFiles();
var desFldr = DriveApp.getFolderById("***ID***");
var desFiles = desFldr.getFiles();
var dfnA = [];
while (desFiles.hasNext()) {
var df = desFiles.next();
dfnA.push(df.getName());
}
while (srcFiles.hasNext()) {
var sf = srcFiles.next();
if (dfnA.indexOf(sf.getName()) == -1) {
sf.makeCopy(sf.getName(), desFldr);
}
}
}
但是,我需要全天将此复制的内容移动到其他文件中,但每次我这样做时,同一个文件都会使用新触发器复制回上面的目标文件夹,从而创建一个永久循环。
有没有办法:
- 尽管不是这些文件的所有者,但从原始源文件夹中移动文件?
- 在上传或修改时只复制一次内容?
或者 3) 另一种更好、更聪明的方法?
谢谢你的帮助!
解决方案
我建议以下工作流程:
- 对于复制到目标文件夹的每个文件,将
fileId
. 您可以为此使用属性服务。 - 将文件从一个文件夹复制到另一个文件夹时,请检查
fileId
之前没有存储过。
代码片段:
function CopyFiles() {
var srcFldr = DriveApp.getFolderById("***ID***");
var srcFiles = srcFldr.getFiles();
var desFldr = DriveApp.getFolderById("***ID***");
var desFiles = desFldr.getFiles();
var dfnA = [];
var key = "fileIDs";
var scriptProperties = PropertiesService.getScriptProperties();
var property = scriptProperties.getProperty(key); // Retrieve fileIDs property
// Get array of fileId, or empty array if no file has been copied before:
var arrayIDs = property ? JSON.parse(property) : [];
while (desFiles.hasNext()) {
var df = desFiles.next();
dfnA.push(df.getName());
}
while (srcFiles.hasNext()) {
var sf = srcFiles.next();
// Check not only file name, but also whether fileId has been stored before:
if (dfnA.indexOf(sf.getName()) == -1 && arrayIDs.indexOf(sf.getId()) == - 1) {
sf.makeCopy(sf.getName(), desFldr);
arrayIDs.push(sf.getId()); // Add fileId to array of IDs
}
}
scriptProperties.setProperty(key, JSON.stringify(arrayIDs)); // Store updated array
}
参考:
推荐阅读
- spring-boot - 弹簧腹板和弹簧腹板通量之间的明显区别
- python - 没有名为 Aiofiles 的模块(在 Zaphosting 服务器上)
- c# - 如何使用 fo-dicom 从 DICOMDIR 中删除文件
- c++ - 如何在窗口中输入新行 - C++
- python - 我试图使用 python 和 kivy 制作一个应用程序,虽然代码很好并且没有抛出任何错误我得到黑屏
- docker - Windows ServerCore - HttpSendRequest 以操作中止结束
- python - 由于某种原因无法将列表写入 txt 文件
- node.js - @nestjs/swagger:是否可以防止网络钓鱼?
- elasticsearch - Elasticsearch:按单词和点拆分的自定义标记器
- android - 未调用应用内购买 API