🐣
GoogleDrive内の大量ファイル・サブフォルダーを1つのフォルダにまとめる
背景・概要
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つのフォルダーにまとめる」という目的で利用できると思います。
Discussion