Created
July 6, 2024 10:24
-
-
Save AX99/51421747b2a5b404faacb845d97bbcd3 to your computer and use it in GitHub Desktop.
Google Apps Script - Drive management
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const parentFolderId = "ID"; // The ID of the main parent folder where files are initially dropped | |
const parentFolder = DriveApp.getFolderById(parentFolderId); | |
const parentName = parentFolder.getName() | |
const files = parentFolder.getFiles(); | |
function moveFiles() { | |
while (files.hasNext()) { | |
const file = files.next(); | |
const fileName = file.getName(); | |
const customerNumber = extractFileNumber(fileName); | |
if (customerNumber) { | |
const customerFolder = getCustomerFolder(customerNumber, parentFolder); | |
const destinationFolder = getDestinationFolder(fileName, customerFolder); | |
if (destinationFolder) { | |
file.moveTo(destinationFolder); | |
Logger.log(`Moved file ${fileName} to folder: ${destinationFolder.getName()}`); | |
} else { | |
Logger.log(`No destination folder found for file: ${fileName}`); | |
} | |
} else { | |
Logger.log(`File number not found in file name: ${fileName}`); | |
} | |
} | |
} | |
function extractFileNumber(fileName) { | |
const match = fileName.match(/_(\d+)$/); // Adjust the regex according to your file naming convention | |
return match ? match[1] : null; | |
} | |
function getCustomerFolder(customerNumber, parentFolder) { | |
const folders = parentFolder.getFoldersByName(`Customer_${customerNumber}`); | |
return folders.hasNext() ? folders.next() : null; | |
} | |
function getDestinationFolder(fileName, customerFolder) { | |
if (!customerFolder) return null; | |
// Logic to determine the destination subfolder based on the file name | |
// For example, if file name contains "invoice" it goes to "Invoices" subfolder | |
if (fileName.toLowerCase().includes("invoice")) { | |
return getOrCreateFolder(customerFolder, "Invoice"); | |
} else if (fileName.toLowerCase().includes("correspondence")) { | |
return getOrCreateFolder(customerFolder, "Correspondence"); | |
} else if (fileName.toLowerCase().includes("contract")) { | |
return getOrCreateFolder(customerFolder, "Contract"); | |
} else { | |
return getOrCreateFolder(customerFolder, "Other"); | |
} | |
} | |
function getOrCreateFolder(topFolder, folderName) { | |
const folders = topFolder.getFoldersByName(folderName); | |
return folders.hasNext() ? folders.next() : topFolder.createFolder(folderName); | |
} | |
function moveFilesToParentFolder() { | |
const levelOnefolders = parentFolder.getFolders(); | |
if (levelOnefolders.hasNext()) { | |
// Iterate through all customer folders | |
while (levelOnefolders.hasNext()) { | |
const levelOneFolder = levelOnefolders.next(); | |
moveFilesFromSubfoldersToParent(levelOneFolder, parentFolder); | |
} | |
} else { | |
Logger.log("No Folders in Parent Folder"); | |
} | |
} | |
function moveFilesFromSubfoldersToParent(folder, rootFolder) { | |
const subFolders = folder.getFolders(); | |
const files = folder.getFiles(); | |
fileCheckAndMove(files, rootFolder); | |
// Iterate through all subfolders - invoice, contracts, etc | |
while (subFolders.hasNext()) { | |
const subFolder = subFolders.next(); | |
const subFiles = subFolder.getFiles(); | |
fileCheckAndMove(subFiles, rootFolder); | |
if (hasSubFolders(subFolder)) { | |
fileCheckAndMove(subFolder, rootFolder) | |
} | |
} | |
} | |
function hasSubFolders(folder) { | |
return folder.getFolders().hasNext(); | |
} | |
function fileCheckAndMove(files, rootFolder) { | |
if (!files.hasNext) return null | |
while (files.hasNext()) { | |
const file = files.next(); | |
file.moveTo(rootFolder); | |
Logger.log(`File ${file.getName()} moved from ${file.getParents()[0]} to ${rootFolder.getName()}`); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment