我在Google云端硬盘帐户中有两个文件夹。 “文件夹1”和“文件夹2”。
在“文件夹1”中有多个文件。可以说有一个文件名Test.txt
,我想使用Driveapp将Test.txt
文件复制到“文件夹2”。我找到了代码,但是它只能与“文件唯一ID”一起使用,无论如何,我们只能通过文件名来创建它吗?
function copyfile() {
var file = DriveApp.getFileById("1pkwQ9te-EtpqC_NC3BoHzOTUoC7axZDcAfxrqMgslwg");
var source_folder = DriveApp.getFolderById("0B8_ub-Gf21e-fkxjSUwtczJGb3picl9LUVVPbnV6Vy1aRFRWc21IVjRkRjBPTV9xMWJLRFU")
var dest_folder = DriveApp.getFolderById("0B8_ub-Gf21e-flJ4VmxvaWxmM2NpZHFyWWxRejE5Y09CRWdIZDhDQzBmU2JnZnhyMTU2ZHM")
// Make a backup copy.
var file2 = file.makeCopy('BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + file.getName());
dest_folder.addFile(file2);
source_folder.removeFile(file2);
}
如果我使用文件名而不是File Unqiue ID,则会出现错误:
“ TypeError:在对象FileIterator中找不到函数makeCopy。”
答案 0 :(得分:1)
Test.txt
的文件复制到目标文件夹。如果我的理解是正确的,那么该修改如何?
getFilesByName()
方法。在这种情况下,将返回“ FileIterator”,因为相同文件名的文件可以存在于Google云端硬盘中。
getFileById(fileId)
时,会发生错误。source_folder.getFilesByName(filename)
。修改脚本后,它如下所示。
在这种模式下,使用文件夹ID。
function copyfile() {
var filename = "Test.txt";
var sourceFolderId = "0B8_ub-Gf21e-fkxjSUwtczJGb3picl9LUVVPbnV6Vy1aRFRWc21IVjRkRjBPTV9xMWJLRFU";
var destinationFolderId = "0B8_ub-Gf21e-flJ4VmxvaWxmM2NpZHFyWWxRejE5Y09CRWdIZDhDQzBmU2JnZnhyMTU2ZHM";
var source_folder = DriveApp.getFolderById(sourceFolderId);
var file = source_folder.getFilesByName(filename);
if (file.hasNext()) {
var dest_folder = DriveApp.getFolderById(destinationFolderId);
var srcFile = file.next();
var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
srcFile.makeCopy(newName, dest_folder);
}
}
Test.txt
的文件,则该文件将被复制到目标文件夹。在此模式下,使用文件夹名称。
function copyfile() {
var filename = "Test.txt";
var sourceFolderName = "Folder 1";
var destinationFolderName = "Folder 2";
var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
var file = source_folder.getFilesByName(filename);
if (file.hasNext()) {
var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
var srcFile = file.next();
var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
srcFile.makeCopy(newName, dest_folder);
}
}
Folder 1
和Folder 2
的文件夹已存在于Google云端硬盘中。如果我误解了您的问题,而这不是您想要的方向,我深表歉意。
Folder 1
中的两个文件“ Test.txt”和“ Test2.txt”。在这种情况下,以下脚本如何?
function copyfile() {
var filenames = ["Test.txt", "Test2.txt"];
var sourceFolderName = "Folder 1";
var destinationFolderName = "Folder 2";
var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
for (var i = 0; i < filenames.length; i++) {
var filename = filenames[i];
var file = source_folder.getFilesByName(filename);
if (file.hasNext()) {
var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
var srcFile = file.next();
var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
srcFile.makeCopy(newName, dest_folder);
}
}
}
filenames
数组中。如果要将Folder 1
文件夹中的所有文件复制到Folder 2
文件夹中,则可以使用以下脚本。
function copyfile() {
var sourceFolderName = "Folder 1";
var destinationFolderName = "Folder 2";
var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
var files = source_folder.getFiles();
var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
while (files.hasNext()) {
var srcFile = files.next();
var newName = 'BACKUP ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') + '.' + srcFile.getName();
srcFile.makeCopy(newName, dest_folder);
}
}