Skip to content

Instantly share code, notes, and snippets.

@AX99
Created July 6, 2024 10:24
Show Gist options
  • Save AX99/51421747b2a5b404faacb845d97bbcd3 to your computer and use it in GitHub Desktop.
Save AX99/51421747b2a5b404faacb845d97bbcd3 to your computer and use it in GitHub Desktop.
Google Apps Script - Drive management
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