【GAS】Googleドライブ内でファイルとフォルダを複製する方法|そのまま使えるコード例あり

AI画像,イメージ

皆さんは、Googleドライブのフォルダを丸ごと別のフォルダにコピーしたいと思ったことはありませんか?

例えば、プロジェクト管理のためにテンプレートフォルダを毎回コピーしたり、同じ構成のフォルダを複数作成したりといったケースは多いでしょう。

しかし、Googleドライブの標準的な機能では、フォルダを丸ごと一度にコピーすることはできません。

そこで今日は、Google Apps Scriptを用いてGoogleドライブのフォルダを丸ごと別のフォルダにコピーする方法について説明します。

プロジェクトのテンプレートとなるフォルダなど、特定のソースフォルダを、目的のターゲットフォルダにコピーするスクリプトを作成しましょう。

目次

1. copyTemplate関数

AI画像,イメージ2
function copyTemplate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

この行は、現在開いている(アクティブな)スプレッドシートを取得します。

  var sheet = ss.getActiveSheet();

アクティブなスプレッドシートの中で現在選択されているシートを取得します。

  var targetFolderId = sheet.getRange('A1').getValue();

アクティブなシートのA1セルに書かれている値(ここではターゲットフォルダのID)を取得します。

  var sourceFolderId = 'source-folder-id';

ここではソースフォルダのIDをハードコーディングしています。

実際は、このIDを具体的なソースフォルダのIDに置き換える必要があります。

  var sourceFolder = DriveApp.getFolderById(sourceFolderId);
  var targetFolder = DriveApp.getFolderById(targetFolderId);

ソースフォルダとターゲットフォルダの両方を、それぞれのIDを使って取得します。

  copyFolder(sourceFolder, targetFolder);
}

`copyFolder`関数を呼び出して、ソースフォルダの内容をターゲットフォルダにコピーします。

2. copyFolder関数

AI画像,イメージ3
function copyFolder(sourceFolder, targetFolder) {
  var folders = sourceFolder.getFolders();
  var files   = sourceFolder.getFiles();

ソースフォルダ内のすべてのフォルダとファイルを取得します。

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), targetFolder);
  }

ソースフォルダ内のすべてのファイルを順番に取得し、そのファイルをターゲットフォルダにコピーします。

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetSubFolder = targetFolder.createFolder(folderName);
    copyFolder(subFolder, targetSubFolder);
  }
}

ソースフォルダ内のすべてのサブフォルダを順番に取得し、それぞれのサブフォルダに対して、その名前を使ってターゲットフォルダ内に新しいフォルダを作成します。

そして、再帰的に`copyFolder`関数を呼び出し、サブフォルダの内容を新しく作成したターゲットのサブフォルダにコピーします。

まとめ

AI画像,イメージ4

以上のコードを用いて、Googleドライブのフォルダを丸ごと別のフォルダにコピーするスクリプトが完成しました。

フォルダのコピーは、ファイルだけでなくサブフォルダも含めて行われ、その結果ターゲットフォルダにはソースフォルダの完全なコピーが作成されます。

スプレッドシートの特定のセルにターゲットフォルダのIDを入力するだけで、テンプレートとなるフォルダを簡単にコピーできるようになります。

しかし、Google Apps ScriptのDriveAppの制限により、このコードではファイルやフォルダのアクセス権や共有設定など、特定のメタデータはコピーされません。

必要に応じて、さらなるカスタマイズを加えて使用してください。

以下は、ソースコードのまとめです。

このコードを利用し、Googleドライブ内で効率的にフォルダのコピー・管理を行いましょう。

function copyTemplate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var targetFolderId = sheet.getRange('A1').getValue(); // ターゲットフォルダのIDはセルA1に入力してください
  var sourceFolderId = 'source-folder-id'; // テンプレートフォルダのIDをここに入力してください

  var sourceFolder = DriveApp.getFolderById(sourceFolderId);
  var targetFolder = DriveApp.getFolderById(targetFolderId);

  copyFolder(sourceFolder, targetFolder);
}

function copyFolder(sourceFolder, targetFolder) {
  var folders = sourceFolder.getFolders();
  var files   = sourceFolder.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), targetFolder);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetSubFolder = targetFolder.createFolder(folderName);
    copyFolder(subFolder, targetSubFolder);
  }
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次