gpt4 book ai didi

google-apps-script - 使用谷歌脚本在谷歌驱动器中合并同名文件夹

转载 作者:行者123 更新时间:2023-12-05 06:41:59 25 4
gpt4 key购买 nike

谁知道如何使用谷歌脚本在谷歌驱动器中合并同名文件夹?

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

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

第三步:删除另一个文件夹(同名)。

非常感谢。

Merge Folder with the same name under the same Folder

最佳答案

我的方法:

  1. 获取要在其中检查同名文件夹的父文件夹
  2. 遍历所有子文件夹并获取它们的名称
  3. 使用每个找到的文件夹名称查找父文件夹中的所有文件夹
  4. 将给定文件夹名称的第一次迭代指定为目标文件夹
  5. 如果有多个具有给定名称的文件夹,将所有文件和文件夹从该文件夹移动到目标文件夹并删除该文件夹

试试这个:

我已经在一些垃圾数据上成功测试了这个功能。

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

警告

Be careful. In Google Drive you can have one file in multiple folders. This code will remove files (in folders with same name) from all parent folders and moves them only in one. If you prefere removing it only from the folder with same name, you need to add some if statement in moveFolder() and moveFile() functions.

Google script allows to run custom function only for (approx.) 6 minutes. If you have large amout of folders to check, you should make some workaround. You can add e.g. execution time limit. Example is here: Prevent Google Scripts from Exceeding the Maximum Execution Time Limit

编辑:

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

//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);
}

关于google-apps-script - 使用谷歌脚本在谷歌驱动器中合并同名文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com