Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用应用程序脚本移动文件夹_Google Apps Script_Google Drive Api - Fatal编程技术网

Google apps script 使用应用程序脚本移动文件夹

Google apps script 使用应用程序脚本移动文件夹,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,所以我是JS的新员工,试图在我工作的公司建立一个内部运作计划。下面是我的第一段代码。我已经创建了一个谷歌表单,并设置了一个触发器,这样当点击提交按钮时,下面的代码就会启动。触发器工作,前两个函数工作,但我似乎无法让Karrie文件夹从根目录移动到子文件夹id(我确实有正确的id,但在本文中省略了它)。也许我在做这一切都倒退,所以任何帮助将不胜感激 // Create Karrie Folder In Root function start() { var sourceFolder = &quo

所以我是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);}

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

修改点:
  • 要移动文件夹,需要移动文件夹的父文件夹
  • 但是当将
    addFolder()
    用于该文件夹时,该文件夹有两个父文件夹。
    • 因此,必须删除原始父级
  • 没有
    getFolderByName()
    。请使用
    getFoldersByName()
修改脚本: 注:
  • 在这个脚本中,
    “Karrie”
    的文件夹和父文件夹分别假定Google驱动器中只有一个文件夹和父文件夹
参考资料:
如果我误解了你的问题,请告诉我。我想修改它

编辑1: 运行此函数时,
Logger.log(r)
的ID是否显示“Karrie”的文件夹ID

编辑2: 请确认并考虑以下要点:

  • 再次确认文件夹名称和文件夹的存在
  • 运行
    sample()
    并确认文件夹ID为“Karrie”
  • 确认是否没有同名的函数
  • 我可以问一下“Karrie”的文件夹ID吗?如果无法使用DriveApp.getFoldersByName(“Karrie”).next().getId()检索文件夹ID,我建议直接使用文件夹ID“Karrie”

  • 从2020年起,我发现移动文件的更简单方法是使用以下功能:

    function moveToFolder(file, sourceFolder, destFolder) {
       var file = DriveApp.getFileById(file.getId());
       destFolder.addFile(file);
       sourceFolder.removeFile(file);
    }
    
    由于第一行,您可以将
    电子表格
    、谷歌
    表单
    文档
    或其他谷歌对象转换为
    文件

    然后我们只使用
    文件夹
    类的方法:

    注:

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

    • 如果要移动多个文件,只需对它们进行迭代即可


    是的,您了解我的问题,因此按照您的建议对我的脚本进行了更改,但文件夹仍然没有从根文件夹移动到子文件夹。@Robert Johnson感谢您的回复。在我的环境中,修改后的脚本可以工作。那么我能问一下你的情况吗?是否发生了一些错误?你在谷歌硬盘上运行脚本了吗?一点错误都没有,这让我很困惑。karrie文件夹确实显示在根目录中,但不显示在它应该移动到的子文件夹中。@Robert Johnson我添加了一个示例脚本。运行函数时,
    Logger.log(r)
    的ID是否显示“Karrie”的folderId?否,我使用调试器运行脚本,但未返回任何内容
    function sample() {
      var r = DriveApp.getFoldersByName("Karrie").next().getId();
      Logger.log(r)
    }
    
    function moveToFolder(file, sourceFolder, destFolder) {
       var file = DriveApp.getFileById(file.getId());
       destFolder.addFile(file);
       sourceFolder.removeFile(file);
    }