ฉันต้องทำซ้ำทั้งโฟลเดอร์ใน Google Drive ของฉันสัปดาห์ละครั้ง ในโฟลเดอร์มีไฟล์ประมาณ 25 ไฟล์ วิธีง่ายๆในการทำเช่นนี้คืออะไร?
ฉันต้องทำซ้ำทั้งโฟลเดอร์ใน Google Drive ของฉันสัปดาห์ละครั้ง ในโฟลเดอร์มีไฟล์ประมาณ 25 ไฟล์ วิธีง่ายๆในการทำเช่นนี้คืออะไร?
คำตอบ:
หากคุณใช้แอปพลิเคชัน Google Drive บนพีซีคุณสามารถคัดลอกและวางโฟลเดอร์ในไดเรกทอรี Google ไดรฟ์ซึ่งจะเป็นการคัดลอก ฉันไม่เชื่อว่าเป็นไปได้ที่จะทำสิ่งนี้จากเว็บแอปพลิเคชัน
เขียนสคริปต์ของแอปเพื่อแก้ไขปัญหานี้ คุณสามารถคัดลอกเนื้อหาของโฟลเดอร์ใด ๆ รวมทั้งโครงสร้างในนั้น สคริปต์จะช่วยขจัดความต้องการแอปเดสก์ท็อป Google Drive ด้วยการเพิ่มทริกเกอร์คุณสามารถทำให้กระบวนการเป็นไปโดยอัตโนมัติ
GDrive คัดลอกโครงสร้างโฟลเดอร์ / สคริปต์เนื้อหา
โปรดทราบ:
_copy
ให้กับโฟลเดอร์ย่อยทั้งหมดfolder_you_want_copied_copy
อยู่ในลำดับชั้นพาเรนต์สูงสุดของ Google ไดรฟ์ของคุณดังนั้นหากคุณคัดลอกโฟลเดอร์ย่อยของไดรฟ์ก็จะเพิ่มขึ้นไปถึงระดับสูงสุดเมื่อคัดลอกหากคุณอยู่ในเว็บอินเตอร์เฟสของ Google Drive ...
สร้างโฟลเดอร์ใหม่และตั้งชื่อตามที่คุณต้องการ
ไปที่โฟลเดอร์ที่มีอยู่แล้วเลือกไฟล์ทั้งหมดคลิกขวาและกดคัดลอก
เลือกสำเนาทั้งหมดคลิกขวาแล้วกดไปที่ เลือกโฟลเดอร์ใหม่
โปรดทราบว่าวิธีนี้จะไม่ทำงานหากโฟลเดอร์ที่คุณต้องการคัดลอกมีโฟลเดอร์ย่อย
คำตอบที่ล่าช้ามากสำหรับ OP และฉันคิดว่าไม่สามารถทำได้แม้ในเวลาที่ถาม แต่นี่คือสิ่งที่ฉันทำในวันนี้:
หมายเหตุ: นี่เป็นวิธีการแก้ปัญหาเมื่อคุณมีไฟล์และโฟลเดอร์ย่อยจำนวนน้อยที่รวมกันเป็นไฟล์บีบอัดขนาดเล็ก มีประโยชน์ลดลงเมื่อขนาดไฟล์บีบอัดรวมเพิ่มขึ้น
ฉันชอบที่จะไม่อนุญาตให้บุคคลที่สามเข้าถึงไดรฟ์ของฉันเว้นแต่ฉันจะต้องทำเช่นนั้นเช่นLucky 711ฉันเขียนสคริปต์ของตัวเอง ฉันจะฝากไว้ที่นี่เพื่อนักผจญภัยผลลัพธ์ของ Google ในอนาคต มันจะคัดลอกโฟลเดอร์และเนื้อหาทั้งหมด สำหรับกรณีการใช้งานของฉันฉันเขียนมันเพื่อจัดการไฟล์ที่มีหลายพาเรนต์โดยเพียงแค่เพิ่มโฟลเดอร์ที่คัดลอกเป็นพาเรนต์ใหม่ หากคุณไม่ต้องการให้วางส่วน "นับจำนวนผู้ปกครองที่ไม่ใช่ผู้ปกครองนี้"
function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {
var folderToCopy = DriveApp.getFolderById(folderToCopyId);
var newParentFolder = DriveApp.getFolderById(newParentFolderId);
// Create the copy of the folder
var newFolder = newParentFolder.createFolder(newFolderName);
// Copy all the files in that folder
var files = folderToCopy.getFiles();
while (files.hasNext()) {
var file = files.next();
// Count the parents that aren't this parent
var countOfOtherParents = 0;
var parents = file.getParents();
while (parents.hasNext()) {
var parent = parents.next();
if (parent.getId() !== folderToCopyId) { countOfOtherParents++; }
}
// If it's unique, then copy it. Otherwise, just add it to the new parent.
if (countOfOtherParents == 0) {
file.makeCopy(file.getName(),newFolder);
} else {
newFolder.addFile(file);
}
}
// Copy all the subfolders in that folder
var folders = folderToCopy.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
}
}
สำหรับการอ้างอิงหากคุณต้องการสร้างสำเนาไฟล์ใหม่ที่มีหลายพาเรนต์แทนที่จะเพิ่มเพียงโฟลเดอร์ใหม่เป็นพาเรนต์อื่นโค้ดที่สั้นกว่าจะมีลักษณะดังนี้:
function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {
var folderToCopy = DriveApp.getFolderById(folderToCopyId);
var newParentFolder = DriveApp.getFolderById(newParentFolderId);
// Create the copy of the folder
var newFolder = newParentFolder.createFolder(newFolderName);
// Copy all the files in that folder
var files = folderToCopy.getFiles();
while (files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(),newFolder);
}
// Copy all the subfolders in that folder
var folders = folderToCopy.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
}
}
1jVlkj------------------------Gk3D7
ยกเว้นว่าขีดคั่นทั้งหมดเป็นตัวอักษร สตริงซึ่งพูดพล่อยๆเป็น ID ที่ไม่ซ้ำที่ Google กำหนด เมื่อคุณมีสามอินพุตคุณจะเรียกใช้ฟังก์ชันนี้จากฟังก์ชั่นอื่นด้วยสิ่งที่คล้ายกันcopyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
countOfOtherParents++;
บรรทัดเท่านั้นและมันจะทำ สำหรับกรณีการใช้งานของฉันฉันต้องการไฟล์เหล่านั้นเพื่อรับพาเรนต์ใหม่แทนที่จะสร้างสำเนาใหม่ของไฟล์ หากคุณหมายถึงไฟล์ที่ทำหน้าที่เป็นไฮเปอร์ลิงก์ที่เปิดโฟลเดอร์อื่นฉันก็ไม่รู้ว่าคุณทำได้
คุณสามารถใช้โปรแกรมเสริม " คัดลอกโฟลเดอร์ " สำหรับ Google Spreadsheets:
Add-ons > Get add-ons
และเพิ่ม Add-on 'คัดลอกโฟลเดอร์' หรือสามารถใช้Google App Script สำหรับ Chrome เว็บสโตร์เพื่อให้ได้ผลลัพธ์นี้ อันนี้ไม่จำเป็นต้องมีการสร้าง Google Spreadsheet
ฉันใช้หลายเครื่องและไม่ต้องการใส่แอพไดรฟ์ลงในเครื่องทั้งหมดดังนั้นฉันจึงได้เขียนสคริปต์ด้านล่างเพื่อคัดลอกบนเว็บไซต์ มันน่าเกลียดและพื้นฐาน แต่ใช้งานได้ มันคัดลอกโฟลเดอร์และไฟล์ไม่ใช่โฟลเดอร์ย่อย ฉันแน่ใจว่ามีห้องพักสำหรับการปรับปรุงดังนั้นอย่าลังเลที่จะรับสิ่งนี้และปรับปรุงมัน แต่ฉันหวังว่าอย่างน้อยก็มีประโยชน์ตั้งแต่เริ่มต้น
ตามความคิดเห็นด้านล่างนี่เป็นสคริปต์ Google Apps วิธีใช้งานคือเปิดแอปสคริปต์ของ Google จากนั้นคัดลอกและวางรหัสทั้งหมดลงในสคริปต์เปล่า หลังจากนั้นคลิกตัวเลือกการเผยแพร่บนเมนูจากนั้นเลือกปรับใช้เป็นเว็บแอป จากนั้นคุณสามารถคลิกลิงก์รหัสล่าสุดหรือคัดลอกและวาง URL ลงในเบราว์เซอร์ของคุณ จากนั้นคุณจะพบกล่องที่คุณสามารถพิมพ์โฟลเดอร์ที่คุณต้องการคัดลอกและปุ่มคัดลอก ควรสร้างสำเนาของโฟลเดอร์ที่คุณตั้งชื่อและคัดลอกไฟล์ทั้งหมดภายใน
หมายเหตุ: มันจะไม่คัดลอกโฟลเดอร์ย่อยเพียงไฟล์
function doGet()
{
// Build UI
// Create UI object
var copyUI = UiApp.createApplication();
// Create Input box referenced later by the name explicitly set below
var userInput = copyUI.createTextBox().setName("textbox1");
//create button
var enterButton = copyUI.createButton("copy");
// add all objects to UI object
copyUI.add(userInput).add(enterButton);
//Create clicke event handeler and add input field to handeler
var clickHandler = copyUI.createServerHandler('onClick')
.addCallbackElement(userInput);
// add handelrer to the copy button
enterButton.addClickHandler(clickHandler);
// instantiate GUI
return copyUI;
}
function onClick(e)
{
// call currently active application/gui
var app = UiApp.getActiveApplication();
//Pass in the value of the e paramater named 'textbox1'
var input = e.parameter.textbox1;
// log value passed in from user input
//Logger.log(input);
// perform file copy
CopyFile(input);
}
function CopyFile(filename)
{
// declaire variables
var newFolder_String;
var newFolder;
var originalFolder;
var fileArray;
var loopCount;
var arrayLength;
var newFile;
// get original folder id
originalFolder = DocsList.getFolder(filename);
Logger.log(originalFolder.getId());
// create new "copy" folder using: createFolder(<filename>_copy)
newFolder_String = filename + "_Copy";
Logger.log(newFolder_String);
newFolder = DocsList.createFolder(newFolder_String);
// get folders and files from original file using:
// getFiles() from original file into an array
fileArray = originalFolder.getFiles();
// Copy files into folder:
arrayLength = fileArray.length;
loopCount = 0;
// looping through array of file
for (loopCount = 0; loopCount < arrayLength; loopCount++)
{
// create file copies using: file[i].makeCopy() and newFile.addToFolder(CopyFolder)
newFile = fileArray[loopCount].makeCopy();
Logger.log(newFile.getName());
newFile.addToFolder(newFolder)
}
}
หากต้องการทำซ้ำโฟลเดอร์ให้ลากและวางบนโฟลเดอร์อื่นที่ถือปุ่ม CTRL
นี่เป็นแอป Google Script Macros ที่ดีมาก: https://script.google.com/macros/s/AKfycbxbGNGajrxv-HbX2sVY2OTu7yj9VvxlOMOeQblZFuq7rYm7uyo/exec
พร้อมบันทึกตามเวลาจริงและตัวเลือกโฟลเดอร์