Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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脚本在google drive中合并同名文件夹_Google Apps Script - Fatal编程技术网

Google apps script 使用google脚本在google drive中合并同名文件夹

Google apps script 使用google脚本在google drive中合并同名文件夹,google-apps-script,Google Apps Script,谁知道如何使用google脚本在google drive中合并同名文件夹 步骤01:查找根文件夹中是否有重复文件夹 步骤02:如果是,选择一个文件夹作为主文件夹,然后将另一个文件夹(同名)中的所有文件移动到此主文件夹 步骤03:删除另一个文件夹(同名) 非常感谢 目前没有将文件从Google Drive中的一个文件夹移动到另一个文件夹的现有方法 据我所知,这方面存在一个问题。但是,您可以在论坛中遵循给定的解决方法,如下所示: 步骤01: 步骤02: 步骤03:您可以从中使用removeFol

谁知道如何使用google脚本在google drive中合并同名文件夹

步骤01:查找根文件夹中是否有重复文件夹

步骤02:如果是,选择一个文件夹作为主文件夹,然后将另一个文件夹(同名)中的所有文件移动到此主文件夹

步骤03:删除另一个文件夹(同名)

非常感谢

目前没有将文件从Google Drive中的一个文件夹移动到另一个文件夹的现有方法

据我所知,这方面存在一个问题。但是,您可以在论坛中遵循给定的解决方法,如下所示:

步骤01:

步骤02:

步骤03:您可以从中使用
removeFolder(child)
方法,该方法只能用于从当前文件夹中删除给定文件夹

我希望这能有所帮助。

我的方法:
  • 获取要在其中检查同名文件夹的父文件夹
  • 循环所有子文件夹并获取它们的名称
  • 查找父文件夹中具有每个找到的文件夹名称的所有文件夹
  • 指定给定folderName的第一次迭代作为目标文件夹
  • 如果有多个具有给定名称的文件夹,请将此文件夹中的所有文件和文件夹移动到目标文件夹,然后将该文件夹丢弃
  • 试试这个: 我已在一些垃圾数据上成功测试了此功能。

    function mergeDuplicateFolders() {
    
      var parentFolder = DriveApp.getFolderById('{paste your folder ID here}'); //parent folder which will be scanned for duplicates
      var childFolderIterator = parentFolder.getFolders(); //all folders within parent folder
    
      //iteration over all folders in parent directory
      while (childFolderIterator.hasNext()) {
        var childFolder = childFolderIterator.next();
        var childFolderName = childFolder.getName();
        var childSameNameIterator = parentFolder.getFoldersByName(childFolderName);
    
        //just check if folder with givn name exist (there should be at least one)
        if(childSameNameIterator.hasNext()) {
          var destFolder = childSameNameIterator.next();
    
          //iteration over 2nd and all other folders with given name
          while (childSameNameIterator.hasNext()) {      
            var toMergeFolder = childSameNameIterator.next();
            var filesToMove = toMergeFolder.getFiles();
            var foldersToMove =  toMergeFolder.getFolders()
    
            //iteration over all files    
            while (filesToMove.hasNext()) {
              var file  = filesToMove.next();
              moveFile(file, destFolder);
            }
    
            //iteration over all subfolders    
            while (foldersToMove.hasNext()) {
              var folder  = foldersToMove.next();
              moveFolder(folder, destFolder);
            }
           //trashes empty folder
            toMergeFolder.setTrashed(true);
          }
        }
    
      }
    
    }
    
    //custom function which removes all parents from speciefied file and adds file to new folder
    function moveFile(file, destFolder) {
      var currentParents = file.getParents();
      while (currentParents.hasNext()) { // be careful, this loop will remove all parents from the file... if you want to have this file in multiple folders you should add if statement to remove it only from specified folder
        var currentParent = currentParents.next();
        currentParent.removeFile(file); 
      }
      destFolder.addFile(file);
      Logger.log("File moved to " + destFolder.getName());
    }
    
    //custom function which removes all parents from speciefied folder and adds that folder to new one
    function moveFolder(folder, destFolder) {
      var currentParents = folder.getParents();
      while (currentParents.hasNext()) { // be careful, this loop will remove all parents from the folder... if you want to have this folder in multiple folders you should add if statement to remove it only from specified folder
        var currentParent = currentParents.next();
        currentParent.removeFolder(folder);
      }
      destFolder.addFolder(folder);
      Logger.log("Folder moved to " + destFolder.getName());
    }
    
    您的申请: 当然,您可以编辑该函数的前两行,并将parentFolderId添加为该函数的参数。然后,您可以在自己的迭代中使用此函数,并检查多个文件夹中是否存在重复项

    function mergeDuplicateFolders(parentFolderId) {
    
      var parentFolder = DriveApp.getFolderById(parentFolderId);
    
      //...continue with the code from above
    
    警告 小心点。在Google Drive中,您可以在多个文件夹中拥有一个文件。 此代码将从所有文件夹中删除文件(位于同名文件夹中) 父文件夹,并仅在一个文件夹中移动它们。如果你想移除它 仅从同名文件夹中,您需要添加一些if语句 在
    moveFolder()
    moveFile()函数中

    谷歌脚本只允许运行自定义功能(约)6分钟。如果您有大量文件夹要检查,您应该采取一些变通办法。您可以添加例如执行时间限制。例如:

    编辑: 当然,有更简单的方法只从合并文件夹中删除文件。。。删除两个自定义函数并以这种方式编辑两个迭代。。。我一开始没意识到

    //iteration over all files
    while (filesToMove.hasNext()) {
      var file = filesToMove.next();
      toMergeFolder.removeFile(file); 
      destFolder.addFile(file);
    }
    
    //iteration over all subfolders
    while (foldersToMove.hasNext()) {
      var folder = foldersToMove.next(); 
      toMergeFolder.removeFolder(folder);
      destFolder.addFolder(folder);
    }
    

    欢迎来到stackoverflow。请参阅显示您对每个步骤的尝试以及失败的原因。如果您用于许多任务,则不需要