谁知道如何使用谷歌脚本合并谷歌驱动器中具有相同名称的文件夹?
步骤01:查找根文件夹中是否有任何重复文件夹;
步骤02:如果是,请选择一个文件夹作为主文件夹,然后将另一个文件夹中的所有文件(具有相同名称)移动到该主文件夹;
步骤03:删除其他文件夹(同名)。
非常感谢提前。
答案 0 :(得分:0)
Class Folder没有现有方法将文件从Google云端硬盘中的一个文件夹移动到另一个文件夹。
据我所知,Seeing duplicate files after sync on desktop Drive version 1.14存在问题。但是,您可以按照以下步骤在论坛中遵循给定的解决方法:
步骤01: How to Find duplicates files (by name and/or size) in a specific folder of my google drive
步骤02: How do I copy & move a file to a folder in Google Apps Script?
步骤03:您可以使用Class Folder中的URL
方法,该方法只能用于从当前文件夹中删除指定的文件夹。
我希望有所帮助。
答案 1 :(得分:0)
我已经在一些垃圾数据上成功测试了这个功能。
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云端硬盘中,您可以在多个文件夹中拥有一个文件 此代码将从所有文件中删除文件(在同名文件夹中) 父文件夹,只在一个文件夹中移动它们。如果你喜欢删除它 只有具有相同名称的文件夹,您需要添加一些if语句 在
moveFolder()
和moveFile()
个函数中。Google脚本只允许(大约)6分钟运行自定义功能。如果要检查大量文件夹,则应该进行一些解决方法。您可以添加例如执行时间限制。示例如下:Prevent Google Scripts from Exceeding the Maximum Execution Time Limit
当然有更简单的方法来删除文件只有frome merged文件夹...删除自定义函数并以这种方式编辑两个迭代...我没有先实现它。
//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);
}