我需要每周一次在我的Google云端硬盘上复制整个文件夹。该文件夹中大约有25个文件。有什么简单的方法可以做到这一点?
我需要每周一次在我的Google云端硬盘上复制整个文件夹。该文件夹中大约有25个文件。有什么简单的方法可以做到这一点?
Answers:
如果您在PC上使用Google云端硬盘应用程序,则可以将该文件夹复制并粘贴到Google云端硬盘目录中,这样就会复制该文件夹。我不认为可以从Web应用程序执行此操作。
如果您在Google云端硬盘的网络界面中...
创建一个新文件夹并命名为您想要的名称。
进入“现有”文件夹,选择所有文件,右键单击并单击“复制”。
选择所有副本,右键单击并单击移至。选择新文件夹。
请注意,如果要复制的文件夹包含子文件夹,则此方法将不起作用。
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
除了所有的破折号都是字符外,大概有点像。该乱码是Google分配的唯一ID。一旦有了三个输入,就可以从另一个函数调用此函数,例如copyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
countOfOtherParents++;
行,然后这样做。对于我的用例,我明确希望这些文件只是获得另一个父项,而不是创建文件的新副本。如果您的意思是充当打开其他文件夹的超链接的文件,那么我不知道您可以这样做。
您可以为Google Spreadsheets 使用“ 复制文件夹 ”加载项:
Add-ons > Get add-ons
并添加“复制文件夹”附加组件。 请参阅视频教程。
或者,可以使用此Chrome网络商店Google App Script来实现此结果。这不需要创建Google Spreadsheet。
我使用多台计算机,并且不想将驱动器应用程序都放在所有计算机上,因此我编写了以下脚本以在网站上进行复制。它很丑陋而且很基本,但是可以用。它仅复制文件夹及其文件,而不复制子文件夹。我确信还有改进的空间,请随时进行改进,但我希望至少从一开始就对您有所帮助。
根据下面的评论,这是一个Google Apps脚本。使用它的方法是打开Google脚本应用程序,然后将所有代码复制并粘贴到空白脚本中。之后,单击菜单上的发布选项,然后选择部署为Web应用程序。然后,您可以单击“最新代码”链接,或将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脚本宏应用程序:https : //script.google.com/macros/s/AKfycbxbGNGajrxv-HbX2sVY2OTu7yj9VvxlOMOeQblZFuq7rYm7uyo/exec
带有实时日志和文件夹选择器。