Gsuiteマイドライブではなく共有ドライブを使う〜GASでフォルダごとコピーする方法〜

GAS
この記事は約4分で読めます。

さて、前回共有ドライブへのデータの移転方法を紹介しました。今回はGASでフォルダごとコピーする方法を紹介していきます。

個人的にはこればっかり利用しています。

Advertisements

前回の記事の紹介

前回の記事はこんなんでした。フォルダごと移転する方法を紹介しています。

Gsuiteマイドライブではなくて共有ドライブを使う〜違いと理由、ファイル移転の方法〜
Gsuiteのビジネス以上を利用されているユーザ向けの記事です。マイドライブは対象ユーザアカウントが削除されたときに、そのアカウントに紐づいているデータやスクリプトも全て削除されてしまいます。その対策として共有ドライブを利用していきましょう。

早速スクリプト紹介

何はともあれスクリプトを紹介します。

function folderCopy() {
 var srcFolderId = "フォルダID";//コピー元
   var srcFolder = DriveApp.getFolderById(srcFolderId);
   var srcFolderName = srcFolder.getName();
 var dstFolderId = "コピー先ドライブID";//このフォルダー内に,フォルダーのコピーを作る
   var dstFolder = DriveApp.getFolderById(dstFolderId);
   var dstFolderName = "フォルダの名前";

   if(dstFolderName=="") dstFolderName = srcFolderName+"(コピー)";//コピー先の最上位フォルダだけ識別しやすくする
 var newFolder = dstFolder.createFolder(dstFolderName)
   Logger.log(newFolder.getName());
   copy(srcFolder, newFolder);//コピー元,コピー先
 }

 function copy(srcFolder, newFolder){
   var srcFiles = srcFolder.getFiles();//フォルダ内ファイルをゲット
   while(srcFiles.hasNext()) {
     var srcFile = srcFiles.next();
     Logger.log(srcFile.getName());
     srcFile.makeCopy(srcFile.getName(), newFolder);
   }
   var srcFolders = srcFolder.getFolders();//フォルダ内フォルダをゲット
   while(srcFolders.hasNext()) {
     var nextSrcFolder = srcFolders.next();
     Logger.log(nextSrcFolder.getName());
     var nextNewFolder = newFolder.createFolder(nextSrcFolder.getName());
     copy(nextSrcFolder, nextNewFolder);//再帰
   }
 }

フォルダないのデータをクルクル再帰で取得・コピーしています。みたままだと思いますし、処理内容は簡単に説明が入っていますので、コード自体を読んでもらえればわかるかと。

自分がドライブの管理者以外の場合

自分がほぼ全て管理者になってしまっているので、テストできていないのですが、もしかすると管理者意外だとアクセス権がなく実行できない可能性もあります。

チームの管理者権限を設定するなどで対応可能だと思いますが、動かない場合はご容赦ください

まとめ

GASでフォルダコピーをする保存先を共有ドライブに設定することも可能という記事でした。

自分が管理者である場合以外のテストができていないので、完全に動作しない方もいるかもしれませんが、その際は権限設定等を見直して実施可能な状況か否か確認してください。

会社等で情報システム部門等が管理者になっている場合、データを共有してGASスクリプトを情シス側で実行してもらう必要があるかもしれません(すみません、細かく検証していないので、なんとも言えないですが。。)

コメント