我想使用 appscript 从文件夹中复制文件。
const copy = (fromFolder, toFolder) => {
// copy files
const files = fromFolder.getFiles()
while (files.hasNext()) {
const file = files.next();
const newFile = file.makeCopy(toFolder)
newFile.setName(file.getName())
}
// copy folders
const folders = fromFolder.getFolders()
while (folders.hasNext()) {
const folder = folders.next()
const newFolder = toFolder.createFolder(folder.getName())
copy(folder, newFolder)
}
}
脚本按预期工作,但当我尝试复制文件夹中的 Apps 脚本文件时,它不起作用。因此,我使用 Drive API 服务进行了测试。在我的控制台中,我可以看到所有文件,甚至是 Apps 脚本文件。但是,当我尝试复制它们时,它不适用于 Apps 脚本文件。我做错了什么?
const copyResource = (sourceFolderId, targetFolderId) => {
const params = {
q: `'${sourceFolderId}' in parents and trashed = false and mimeType != 'application/vnd.google-apps.folder'`,
supportsAllDrives: true,
includeItemsFromAllDrives: true,
};
const files = Drive.Files.list(params).files;
console.log(files);
files.forEach((file) => {
const resource = {
title: file.title,
parents: [{ id: targetFolderId }],
};
const newFile = Drive.Files.copy(resource, file.id, {
supportsAllDrives: true,
});
});
};
这只是我的猜测。从您的问题和以下回复来看,
是的 Drive api 服务已启用。没有消息错误。似乎我们无法在共享驱动器中复制 appscript 文件,或者我可能做错了什么。
我认为如果您的 Drive API 显示脚本适用于 Drive API v2,则
Drive.Files.list(params).files
返回未定义,并且会发生错误。但是,你说There is no message error.
。从这种情况来看,我猜测您在高级Google服务中启用了Drive API v3。如果我的猜测是正确的,那么下面的修改怎么样?
const copyResource = (sourceFolderId, targetFolderId) => {
const params = {
q: `'${sourceFolderId}' in parents and trashed = false and mimeType != 'application/vnd.google-apps.folder'`,
supportsAllDrives: true,
includeItemsFromAllDrives: true,
corpora: "allDrives",
};
const files = Drive.Files.list(params).files;
console.log(files);
files.forEach((file) => {
const resource = {
name: file.name,
parents: [targetFolderId],
};
const newFile = Drive.Files.copy(resource, file.id, {
supportsAllDrives: true,
});
console.log(newFile);
});
};