- 您想要复制文件名为
Test.txt
通过更改文件名将源文件夹移动到目标文件夹。
- 您想要使用文件名复制文件。
- 您希望使用 Google Apps 脚本来实现此目的。
如果我的理解是正确的,那么这个修改怎么样?
修改要点:
- In order to retrieve the file using the filename, please use the method of
getFilesByName()
. In this case, "FileIterator" is returned, because the files of same filename can be existing at Google Drive.
- 当文件名用于
getFileById(fileId)
,发生错误。
- 使用此,为了检索特定文件夹中的文件,请修改为
source_folder.getFilesByName(filename)
.
- 复制文件时,可以使用以下方法makeCopy(名称,目的地) https://developers.google.com/apps-script/reference/drive/file#makecopyname,-destination。这样就可以直接将文件复制到目标文件夹中。
当你的脚本被修改后,它会变成如下所示。
模式一:
在此模式中,使用文件夹 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
在源文件夹中,文件被复制到目标文件夹。
模式2:
在此模式中,使用文件夹名称。
修改后的脚本:
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
and Folder 2
存在于 Google 云端硬盘中。
参考:
- 获取文件名(名称) https://developers.google.com/apps-script/reference/drive/drive-app#getfilesbynamename
- 类 FileIterator https://developers.google.com/apps-script/reference/drive/file-iterator.html
- makeCopy(名称,目的地) https://developers.google.com/apps-script/reference/drive/file#makecopyname,-destination
- 获取文件夹按名称(名称) https://developers.google.com/apps-script/reference/drive/drive-app#getFoldersByName(String)
- 类 文件夹迭代器 https://developers.google.com/apps-script/reference/drive/folder-iterator.html
如果我误解了你的问题并且这不是你想要的方向,我深表歉意。
Edit:
- 您要复制文件夹中的“Test.txt”和“Test2.txt”两个文件
Folder 1
.
对于这种情况,下面的脚本怎么样?
示例脚本1:
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
.
示例脚本2:
如果要复制文件夹中的所有文件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);
}
}