📁

Googleドライブ上のファイル名をGASで一括変換する

2 min read

Apps Scriptで自動生成した大量のスプレッドシートのファイル名の日付をまとめて変換したかったのでやったことメモです。この手の事務作業は月末月初多いよね。

対象のフォルダ内を確認

上図のようなイメージで、特定のGoogleドライブフォルダ内にいくつものファイルがあり、それらの名前の一部(例えば接頭辞や日付時刻文字列など)を一括で変更したいとします。
今回はスプレッドシートの名前を変更しますが、ファイルの種別は何であってもOKです。

GASを書く

GASを書くために適当なスプレッドシートを作ります。
スプレッドシートはどのフォルダ上に置いても、どんな名前にしてもよいです。
作成したらメニューバーから ツールスクリプトエディタ を選択してApps Scriptを開きます。

開いたら適当に .gs ファイルを作成して以下のソースコードを書きます。
フォルダのIDや変更したい文字列は適宜調整してください。

ファイル名一括変更.gs
// "20211001-統計A" みたいなファイル名を想定
function fileNameReplace(targetString = '20211101', replaceString = '20211001') {
  // 変換対象のファイルが入っているフォルダをIDで指定
  const folder = DriveApp.getFolderById('GoogleドライブのフォルダIDを指定');
  // ファイル一覧を取得(イテレータが得られる)
  const files = folder.getFiles();

  // 次に処理可能なファイルがあるか確認し、あれば1つずつ処理
  while (files.hasNext()) {
    // ファイル名を確認
    const file = files.next();
    const currentFileName = String(file.getName());
    // 文字列置換を使ってファイル名の一部だけを置き換える
    const newFileName = currentFileName.replace(targetString, replaceString);
    // ファイル名を再設定する(リネーム)
    file.setName(newFileName);
    // 確認のためコンソール表示
    console.log(newFileName);
  }
}

あとはメニューから実行ボタンをクリックするだけでOKです。

Googleドライブは同名のファイルが同じフォルダにいくつあってもエラーにならない(インスタンスとして管理されファイル名はユニーク扱いにならない)ので、ファイル名文字列全体を操作する場合は注意が必要です。(全部同じ名前とかになったときにつらい)

複雑な名前変更をしたい場合

正規表現使いましょう。

ファイル名一括変更.gs
- // 文字列置換を使ってファイル名の一部だけを置き換える
- const newFileName = currentFileName.replace(targetString, replaceString);
+ // 正規表現置換を使ってファイル名の一部だけを置き換える
+ const regex = /^([0-9]{8})(\-.+)$/i;
+ const newFileName = currentFileName.replace(regex, replaceString + '$2');

名前変更ではなく、別の名前で複製したい場合

GASのファイルクラスのメソッド makeCopy を使います。

ファイル名一括変更.gs
- // ファイル名を再設定する(リネーム)
- file.setName(newFileName);
+ // ファイルを同じフォルダ内に複製する
+ file.makeCopy(newFileName, folder);

おわり。調べてないけど同じことできるアドオンとかありそう。

Discussion

ログインするとコメントできます