-
-
Save edoan/181094b112b848404dd814d44b71369c to your computer and use it in GitHub Desktop.
/* Need to copy an entire folder from one Google Drive account to another Google Drive account? | |
* 1. Right-click on original folder in Google Drive | |
* 2. Share with the destination Google account | |
* 3. Go into destination account's Google Drive | |
* 4. Find the shared folder under "Shared with me" | |
* 5. Select all the files (Ctrl-A / Cmd-A) | |
* 6. Right-click, Make a copy | |
* 7. Create a New Folder in destination account's Google Drive | |
* 8. Go to Recent | |
* 9. Select all recently copied files and move to the new folder | |
* 10. Great, except all the filenames begin with "Copy of"xxxxxx.txt | |
* 11. Create a new Apps Script, perhaps using Google Sheets, and use the below script to remove the "Copy of" filename prefix! | |
*/ | |
function fileRename() { | |
var folders = DriveApp.getFoldersByName('FOLDERNAME'); | |
var folder = folders.next(); | |
var files = folder.getFiles(); | |
while(files.hasNext()){ | |
var file = files.next() | |
var fileName = file.getName(); | |
if (fileName.indexOf('Copy of ') > -1) { | |
fileName= fileName.split('Copy of ')[1]; | |
file.setName(fileName); | |
}; | |
}; | |
} |
I reworked this a bit to be fully recursive and to include the parent folder ID.
function fileRename() {
var parentfolder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXXXX');
var recursive = true;
getFilesFromFolder(parentfolder);
var folders = parentfolder.getFolders();
while(folders.hasNext() && recursive){
var folder = folders.next();
getFilesFromFolder(folder);
}
}
function getFilesFromFolder(folder){
var folderName = folder.getName();
Logger.log(folderName);
var files = folder.getFiles();
while(files.hasNext()){
var file = files.next()
var fileName = file.getName();
if (fileName.indexOf('Copy of ') > -1) {
Logger.log(fileName);
fileName= fileName.split('Copy of ')[1];
file.setName(fileName);
};
};
}
Thanks, @edoan! -Saved my day!
I'm using the Chinese version, and my original file is named "a.pdf." After making a copy, the file is named "a.pdf 的副本" (a copy of a.pdf). I can quickly change it back to "a.pdf," but when I download it, the default download filename becomes "a.pdf.pdf 的副本.pdf 的副本" (repeated twice). Does the English version have the same issue? I can't find a way to fix the default download filename.
I'm using the Chinese version, and my original file is named "a.pdf." After making a copy, the file is named "a.pdf 的副本" (a copy of a.pdf). I can quickly change it back to "a.pdf," but when I download it, the default download filename becomes "a.pdf.pdf 的副本.pdf 的副本" (repeated twice). Does the English version have the same issue? I can't find a way to fix the default download filename.
In my comment, the section that rewrites it is this, which should be able to be altered for other languages:
while(files.hasNext()){
var file = files.next()
var fileName = file.getName();
if (fileName.indexOf('Copy of ') > -1) {
Logger.log(fileName);
fileName= fileName.split('Copy of ')[1];
file.setName(fileName);
};
};
I asked Google One and they said this problem does not occur in the English version. As for whether it can be solved, I have to report it to google.drive. Thank you all.
That is an excellent script. Below is some updated code you can add to a gsheet script. It adds a menu item to execute the script to the gsheet menu bar and provides a popup box so you can enter the folder name that contains the files with "Copy to " that need to be fixed up.
function onOpen() {
var SS = SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
ui.createMenu('Remove "Copy of" from start of file names in a folder')
.addItem('Start script', 'fileRename')
.addToUi();
};
function fileRename() {
var inputFolder = Browser.inputBox('Enter folder ID', Browser.Buttons.OK_CANCEL);
if (inputFolder === "") {
Browser.msgBox('Remove "Copy of" from the start of file names in this folder:');
return;
}
var folders = DriveApp.getFoldersByName(inputFolder);
var folder = folders.next();
var files = folder.getFiles();
var fileCnt=0;
var renamedCnt = 0;
while(files.hasNext()){
fileCnt++;
var file = files.next()
var fileName = file.getName();
if (fileName.indexOf('Copy of ') > -1) {
fileName= fileName.split('Copy of ')[1];
file.setName(fileName);
renamedCnt++;
};
};
SpreadsheetApp.getUi().alert('Removed "Copy of" from: '+renamedCnt+" Total Files Processed:"+fileCnt);
}
Thank you, it was really useful!
I keep getting the following error
"Exception: Access denied: DriveApp.
fileRename @ Code.gs:9"