はじめに
今回の記事では、Google Apps Script(GAS)を使用してGoogle Drive上のファイル名とフォルダ名を一括で変更することができるツールを紹介します。
Google Drive上でファイル名やフォルダ名を変更するには、対象のファイル・フォルダを右クリックして[名前の変更]をクリックしたり、それぞれのファイルの編集画面からも名前を変えることはできます。
ですが大量のファイルやフォルダがありそれらをいちいちクリックしながら名前を変更するのは大変な作業になります。
今回は、Google Apps Scriptを(GAS)とスプレッドシートを使用して一括変更を実現します。
- 一つ一つファイル等をクリックして名前を変更する操作が不要となり、時間の節約が可能
- スプレッドシート上で一括管理するため、ミスの減少につながる
- シンプルな作りとすることで、初心者でも作成・操作が可能
GASを触ったことのない方でも簡単に作成可能です。作業時間は10分〜15分ほどです。
動作イメージ
まずは簡単に今回の自動化処理の動作について説明します。
事前準備
まず、名前を変更したいファイルやフォルダを格納するフォルダ(今回は「名前一括変更フォルダ」)を作成します。その中にファイルやフォルダを格納します。
サンプルフォルダ内にはサブファイルを格納しています。
ツール自体は以下のような作りとなっています。
フォルダURLには先程の名前を変更したいファイルやフォルダを格納するフォルダ(今回の例では「名前一括変更フォルダ」)のURLを貼り付けておきます。
ツールの操作方法
まずは、現在のファイル名とフォルダ名を取得します。
メニュー画面の名前変更ツールをクリックし、「ファイルとフォルダの情報を取得」をクリックするとプログラムが実行され、「名前一括変更フォルダ」配下のフォルダやファイルが全て表示されます。
[名前変更後]列に変更したいフォルダ・ファイル名を記載して、再度[名前変更ツール]の[名前を一括変更]をクリックします。
再度「名前一括変更フォルダ」を確認すると、名前が変更されているのが分かります。サブフォルダ内のファイルも名前変更が適用されます。
作成方法
今回の自動化処理の作成には以下が必要となります。
- Google Drive
- スプレッドシート
- Google Apps Script(GAS)
①Google Driveにファイル・フォルダを格納
②GASにプログラムを記載
③スプレッドシートからプログラムを実行
という流れになります。
スプレッドシートの新規作成
まず、Google スプレッドシートにアクセスします。
アクセスしたら、[新しいスプレッドシートを作成]> [空白]をクリックして新しいスプレッドシートを作成します。
その後、[拡張機能]>[Apps Script]をクリックします。
GASの設定
新しいタブが開きGASが表示されます。
ここから、GAS上でスクリプトを作成します。もともと記載してある以下コードは削除します。
function myFunction() {
}
削除したら、以下コードをコピーしてそのまま貼り付けてくだい。
function listFilesInFolder() {
var sheet = SpreadsheetApp.getActiveSheet();
// 5行目以降のデータをクリア
sheet.getRange(5, 1, sheet.getLastRow(), sheet.getLastColumn()).clear();
// A2セルからフォルダのURLを取得
var folderUrl = sheet.getRange("A2").getValue();
// URLからフォルダIDを取得
var matches = folderUrl.match(/\/folders\/([\w-]+)/);
if (!matches || matches.length < 2) {
SpreadsheetApp.getUi().alert('無効なフォルダURLです。');
return;
}
var folderId = matches[1];
var data = [];
// 再帰的にフォルダとファイルの情報を取得
getFilesAndFolders(DriveApp.getFolderById(folderId), data);
// ヘッダーを設定
sheet.getRange("A1").setValue("フォルダURL");
sheet.getRange("A4").setValue("URL");
sheet.getRange("B4").setValue("種別");
sheet.getRange("C4").setValue("名前変更前");
sheet.getRange("D4").setValue("名前変更後");
// スプレッドシートにデータを書き込む
if (data.length > 0) {
sheet.getRange(5, 1, data.length, 4).setValues(data); // 5行目からデータを書き込む
}
}
function getFilesAndFolders(folder, data) {
// フォルダの情報を取得
var folders = folder.getFolders();
while (folders.hasNext()) {
var subFolder = folders.next();
data.push([subFolder.getUrl(), 'フォルダ', subFolder.getName(), '']);
// サブフォルダの中身も取得
getFilesAndFolders(subFolder, data);
}
// ファイルの情報を取得
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
data.push([file.getUrl(), 'ファイル', file.getName(), '']);
}
}
function renameFilesAndFolders() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
// 5行目からデータを読み取る
for (var i = 5; i <= lastRow; i++) {
var url = sheet.getRange(i, 1).getValue();
var type = sheet.getRange(i, 2).getValue();
var originalName = sheet.getRange(i, 3).getValue();
var newName = sheet.getRange(i, 4).getValue();
var id = getIdFromUrl(url);
if (!id) continue; // IDが取得できない場合はスキップ
if (newName && newName !== originalName) {
if (type === 'フォルダ') {
var folder = DriveApp.getFolderById(id);
folder.setName(newName);
} else if (type === 'ファイル') {
var file = DriveApp.getFileById(id);
file.setName(newName);
}
}
}
}
function getIdFromUrl(url) {
var matches = url.match(/\/(folders|d)\/([\w-]+)/);
return matches && matches[2] ? matches[2] : null;
}
function onOpen() {
var ui = SpreadsheetApp.getUi();
// カスタムメニューを作成
ui.createMenu('名前変更ツール')
.addItem('ファイルとフォルダの情報を取得', 'listFilesInFolder')
.addItem('名前を一括変更', 'renameFilesAndFolders')
.addToUi();
}
アプリIDとスプレッドシートIDの記入が完了したら、[Ctrl+S]かApps Script 上部バーの[プロジェクトを保存]をクリックして保存します。
Drive APIの追加
次に、GASの[サービス]から[Drive API]をクリックして追加します。
GASの実行
まず、スプレッドシートのA2セルに取得したいフォルダのURLを貼り付けておきます。
ヘッダー等の文字列は記載する必要はありません。
その後、Google Apps Script 上部バーの[▶実行]をクリックします。最初のスクリプトの実行には権限が必要となるため、[承認が必要です]というモーダルが表示されたら、
[権限を確認]>[表示されているGoogleアカウント]>[詳細]>[無題のプロジェクト(安全ではないページ)に移動]>[許可]まで移動します。クリック後GASが実行されます。
GASおすすめ本
GASをもっと勉強したい!ほかにも自分で何か作成したい!という方には以下がおすすめです。仕事で使えるアイデアなども得ることができます。