🐣

GoogleDrive内の大量ファイル・サブフォルダーを1つのフォルダにまとめる

2023/04/22に公開

背景・概要

GoogleDrive内の指定されたフォルダーに、たくさんのサブフォルダーやファイルがある状況で、別の1つのフォルダーにまるっと移動させる必要があるケースがありました。
中身はPDFファイルなので、1つのファイルにまとめて、一括で印刷するのが目的です。

移動させる際、ファイルの最終更新日時と元のファイル名を取得し、前述の日付フォーマットとスペースで連結することで、更新日の日付順に並べられるようにしています。
たとえば、元のファイル名がdocument.txtで、最終更新日時が2023年3月20日の午前10時30分であった場合、copyNameは "2023/03/20document.txt" となります。

GoogleAppsScript

var emailAddress = "xxx@xxxxx"; // メールアドレスを宣言

function copyDirectory() {
  try {
    var sourceFolderId = "xxxxxx"; // コピー元フォルダのID
    var destinationFolderId = "xxxxxx"; // コピー先フォルダのID

    var sourceFolder = DriveApp.getFolderById(sourceFolderId);
    var destinationFolder = DriveApp.getFolderById(destinationFolderId);

    copyFiles(sourceFolder, destinationFolder); // コピー元フォルダとコピー先フォルダを指定
  } catch (error) {
    // 例外が発生した場合の処理
    var errorMessage = error.toString();
    GmailApp.sendEmail(emailAddress, "Error in copyDirectory function", errorMessage);
  }
}

function copyFiles(srcFolder, dstFolder) {
  try {
    var srcFiles = srcFolder.getFiles(); // フォルダ内のファイルを取得
    while (srcFiles.hasNext()) {
      var srcFile = srcFiles.next();
      Logger.log(srcFile.getName());
      var modificationDate = srcFile.getLastUpdated();
      var copyName = Utilities.formatDate(modificationDate, "Asia/Tokyo", "yyyy/MM/dd") + " " + srcFile.getName();
      srcFile.makeCopy(copyName, dstFolder);
      srcFile.setTrashed(true); // コピー元ファイルを削除
    }
  } catch (error) {
    // 例外が発生した場合の処理
    var errorMessage = error.toString();
    GmailApp.sendEmail(emailAddress, "Error in copyFiles function", errorMessage);
  }
}

詳細説明

このスクリプトには、2つの関数があります。
わかりづらい部分もありますので、説明をします。
適宜編集してご利用ください。

1 copyDirectory()関数

  • コピー元のフォルダーIDとコピー先のフォルダーIDを指定します。
  • try-catchブロックでエラー処理が実行されます。
  • copyFiles()関数が呼び出され、指定されたフォルダーからファイルがコピーされ、コピー元ファイルが自動的に削除されます。
  • スクリプト内でエラーが発生した場合は、指定されたメールアドレスにエラーメッセージが送信されます。

2 copyFiles()関数

  • コピー元のフォルダーとコピー先のフォルダーを指定します。
  • try-catchブロックでエラー処理が実行されます。
  • getFiles()関数を使用して、フォルダー内のファイルを取得します。
  • whileループを使用して、すべてのファイルを反復処理します。
  • makeCopy()関数を使用して、ファイルのコピーを作成し、setTrashed()関数を使用して、コピー元ファイルを削除します。
  • スクリプト内でエラーが発生した場合は、指定されたメールアドレスにエラーメッセージが送信されます。

おわりに

今回は「PDFを一気に印刷したい」という目的でしたが、ファイルを階層に分けすぎて管理が面倒になった場合など、「1つのフォルダーにまとめる」という目的で利用できると思います。

GitHubで編集を提案

Discussion