Googleドライブのフォルダー全体を週に1回複製する必要があります。フォルダーには約25個のファイルがあります。これを行う簡単な方法は何ですか?
Googleドライブのフォルダー全体を週に1回複製する必要があります。フォルダーには約25個のファイルがあります。これを行う簡単な方法は何ですか?
回答:
PCでGoogleドライブアプリケーションを使用している場合、Googleドライブディレクトリ内のフォルダをコピーして貼り付けると、コピーされます。Webアプリケーションからこれを行うことができるとは思わない。
この問題に対処するためだけにApp Scriptを作成しました。フォルダーの内容とその中の構造をコピーできます。スクリプトは、Googleドライブデスクトップアプリの必要性を排除するのに役立ちます。トリガーを追加すると、プロセスを自動化することもできます。
ご注意ください :
_copy
、すべてのサブフォルダーにサフィックスが追加されますfolder_you_want_copied_copy
あなたはドライブのサブフォルダをコピーした場合はコピーしたときに、それは最高のレベルにバブルアップしますが、Googleドライブの最上位の親階層にあります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です。3つの入力を取得したら、次のような別の関数からこの関数を呼び出しますcopyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
countOfOtherParents++;
行のみをコピーして、それを実行できます。私のユースケースでは、ファイルの新しいコピーを作成するのではなく、それらのファイルが別の親を取得することを明示的に望んでいました。他のフォルダを開くハイパーリンクとして機能するファイルを意味する場合、それができるとは知りませんでした。
Google Spreadsheetsの「フォルダのコピー」アドオンを使用できます。
Add-ons > Get add-ons
て、「フォルダのコピー」アドオンを追加します ` ビデオチュートリアルを参照してください。
または、このクロムWebストアのGoogle App Scriptを使用して、この結果を達成できます。これは、Googleスプレッドシートの作成を必要としません。
私は複数のマシンを使用しており、それらすべてにドライブアプリを配置したくないので、サイトにコピーするために以下のスクリプトを作成しました。ugくて基本的ですが、動作します。フォルダーとそのファイルのみをコピーし、サブフォルダーはコピーしません。改善の余地があると確信していますので、お気軽にこれを受け取って改善してください。しかし、少なくとも最初から役に立つと思います。
以下のコメントによると、これは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 Script Macrosアプリです:https : //script.google.com/macros/s/AKfycbxbGNGajrxv-HbX2sVY2OTu7yj9VvxlOMOeQblZFuq7rYm7uyo/exec
リアルタイムのログとフォルダセレクタを使用します。