- Вы хотите скопировать файл с именем
Test.txt
в исходной папке в папку назначения, изменив имя файла. - Вы хотите скопировать файл, используя имя файла.
- Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этой модификации?
Точки модификации:
- Чтобы получить файл с использованием имени файла, используйте метод
getFilesByName()
. В этом случае возвращается «FileIterator», поскольку файлы с таким же именем файла могут существовать на Google Диске. - Когда имя файла используется для
getFileById(fileId)
, возникает ошибка. - Используя это, чтобы получить файл в определенной папке, измените его на
source_folder.getFilesByName(filename)
.
- Когда файл копируется, вы можете использовать метод makeCopy (имя, место назначения) . Таким образом, файл может быть непосредственно скопирован в папку назначения.
Когда ваш сценарий изменен, он выглядит следующим образом.
Pattern 1:
InВ этом шаблоне используется идентификатор папки.
Модифицированный скрипт:
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);
}
}
- В этом случае предполагается, что в Google Диске существуют папки
Folder 1
и Folder 2
.
Ссылки:
Если я неправильно понял ваш вопрос, и это было не то направлениеВы хотите, я прошу прощения.
Редактировать:
- Вы хотите скопировать два файла "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);
}
}