使用App Script移动文件夹

时间:2018-02-26 01:45:48

标签: google-apps-script google-drive-api

所以我是JS的新手,并试图在我工作的公司建立一个内部运营计划。下面是我的代码的第一部分。我创建了一个谷歌表单,并设置了一个触发器,以便在单击提交按钮时,以下代码将启动。触发器工作,前两个功能工作,但我似乎无法让Karrie文件夹从根文件夹移动到子文件夹ID(我确实有正确的ID,但在这篇文章中省略了它)。也许我这样做都倒退了所以任何帮助都会受到赞赏。

// Create Karrie Folder In Root
function start() {

var sourceFolder = "Property Template";
var targetFolder = "Karrie"; 
var source = DriveApp.getFoldersByName(sourceFolder);
var target = DriveApp.createFolder(targetFolder);
if (source.hasNext()) {
  copyFolder(source.next(), target);}}

// Adds Property data to Karrie Folder
function copyFolder(source, target) {
var folders = source.getFolders();
var files   = source.getFiles();
while(files.hasNext()) {
  var file = files.next();
  file.makeCopy(file.getName(), target);}

// Adds Photo Folders to Karrie Folder
while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var targetFolder = target.createFolder(folderName);
  copyFolder(subFolder, targetFolder);}} 


// Moves Karrie folder to propertie folder
function MoveFiles(){
var files = DriveApp.getFolderByName("Karrie");
   var destination = DriveApp.getFolderById("ID NA");
   destination.addFolder(files);}

Debugger

2 个答案:

答案 0 :(得分:0)

我知道你脚本中的MoveFiles()不起作用。如果我的理解是正确的,那么这个修改怎么样?

修改要点:

  • 要移动文件夹,需要移动文件夹的父文件。
  • 但是当addFolder()用于文件夹时,该文件夹有2个父项。
    • 原来的父母必须被删除。
  • 没有getFolderByName()。请使用getFoldersByName()

修改后的脚本:

function MoveFiles(){
  var folder = DriveApp.getFoldersByName("Karrie").next();
  var destination = DriveApp.getFolderById("ID NA");
  destination.addFolder(folder);
  folder.getParents().next().removeFolder(folder);
}

注意:

  • 在此脚本中,"Karrie"的文件夹和父级分别仅在Google云端硬盘中设置一个。

参考文献:

如果我误解了你的问题,请告诉我。我想修改它。

编辑1:

当您运行此功能时,Logger.log(r)的ID是否显示" Karrie"的文件夹ID?

function sample() {
  var r = DriveApp.getFoldersByName("Karrie").next().getId();
  Logger.log(r)
}

编辑2:

请确认并考虑以下几点。

  1. 再次确认文件夹名称和文件夹的存在。
  2. 运行sample()并确认" Karrie"。
  3. 的文件夹ID
  4. 确认是否没有相同名称的功能。
  5. 我可以问你" Karrie"?的文件夹ID如果您无法使用DriveApp.getFoldersByName("Karrie").next().getId()检索文件夹ID,我建议直接使用" Karrie"的文件夹ID。

答案 1 :(得分:0)

从2020年开始,我发现移动文件的更简单方法是使用此功能:

function moveToFolder(file, sourceFolder, destFolder) {
   var file = DriveApp.getFileById(file.getId());
   destFolder.addFile(file);
   sourceFolder.removeFile(file);
}

由于第一行,您可以将Spreadsheet,Google FormDocument或其他Google对象转换为File

然后,我们只使用Folder类的方法:https://developers.google.com/apps-script/reference/drive/folder

注意:

  • 如果您使用.create()创建了文件,则sourceFolder将为DriveApp.getRootFolder()

  • 如果要移动多个文件,只需遍历它们即可。