2023/07/11に更新

【GASで時短】再帰的にドライブフォルダ内のファイルリストを出力する

ドライブスプレッドシート

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。子フォルダ(サブフォルダ)も再帰的に探して一覧を出力します。

こんな悩みを解決します


  • Googleドライブにあるファイルをスプレッドシートでリストにしたいが、たくさんのフォルダがあって手作業でやるのはつらい。

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


指定したフォルダにあるファイルを、スプレッドシート上にリストアップします。
フォルダの中にある子フォルダの中も再帰的に探します。
ファイル名に加え、フォルダ名、最終更新日時、オーナー、ファイルのURLも出力します。

使い方


1.準備

このスクリプトはA1セルを起点にファイルリストを出力します。新しいシートを作成することをおすすめします。

2.スクリプトの実行

上のメニューに有る「スクリプト実行」から「Googleドライブからファイル一覧を取得する(再帰的)」を実行します。

3.フォルダの指定

ファイルリストを取得したいGoogleドライブのフォルダのURLを入力してください。
入力できるのは1つのURLだけです。

3.結果の確認

しばらく待つと一覧が出力されるはずです。

4.注意点

このスクリプトは処理時間が長めです。
200個ほどのファイルリストを出力するのに数十秒かかります。
ファイル数が非常に多いフォルダを指定すると、GASの実行時間上限(360秒)にひっかかるかもしれません。
その時は、親フォルダではなく子フォルダを指定して分割実行するなどで回避してください。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00160/index.html
 */

 function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('Googleドライブからファイル一覧を取得する(再帰的)', 'export_file_list_recursive');

  // メニューを画面に追加する
  menu.addToUi();
}

function export_file_list_recursive() {

  // UIの取得
  const ui = SpreadsheetApp.getUi();

  // アクティブなスプレッドシート、シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 対象のGoogleドライブのURLを入力させる
  const input = ui.prompt('GoogleドライブフォルダのURLを入力してください', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたらスクリプトを終了する
  if (input.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // フォルダのURLを取り出す
  const url = input.getResponseText();

  // フォルダURLからID部分を取得する
  const folder_id = url.replace(/^https:.*folders\//, '');

  // フォルダ内のファイルを再帰的に取得する
  let file_list = get_files_recursive(folder_id);

  // 項目名を追加する
  file_list.unshift(['フォルダ名', 'ファイル名', '最終更新日時', 'オーナー', 'URL']); 

  // 書き込む内容に応じた書き込み範囲を定義
  const range = sheet.getRange(1, 1, file_list.length, file_list[0].length);

  // シートへの書き込みを実行
  range.setValues(file_list);
}


function get_files_recursive(folderId) {

  // 引数に与えられたフォルダIDからフォルダオブジェクトを取得
  const folder = DriveApp.getFolderById(folderId);

  // 結果(ファイル一覧)を格納する変数を宣言
  let result = [];

  // フォルダ内のファイルを取得
  let files = folder.getFiles();

  // ファイルが有る限りループ
  while (files.hasNext()) {

    let file = files.next(); // ファイルを取得
    let filename = file.getName(); // ファイル名を取得
    let last_modified = file.getLastUpdated(); // ファイルの最終更新日を取得
    let owner = file.getOwner().getEmail(); // ファイルのオーナーのメールアドレスを取得
    let file_url = file.getUrl(); // ファイルのURLを取得
    let folder_name = folder.getName();

    // 結果の配列にファイル情報を追加する
    result.push([folder_name, filename, last_modified, owner, file_url]); 
  }

  // フォルダ内のサブフォルダを再帰的に処理
  const subfolders = folder.getFolders();

  // フォルダが存在する限りループする
  while (subfolders.hasNext()) {

    // サブフォルダを取得
    let subfolder = subfolders.next();

    // サブフォルダ内のファイルを取得するため自分自身(関数)を呼び出し
    let subfolder_files = get_files_recursive(subfolder.getId());

    // 結果の配列に追加
    result = result.concat(subfolder_files);
  }

  // メイン関数に対してファイルリストを返す
  return result;
}

関連するアプリ


【GASで時短】ファイル名に文字列を追加する

指定したフォルダ内のすべてのファイルに、プレフィックス(接頭辞)を付与するGoogle Apps Scriptです。例えばスマホで撮影した写真のファイル名に「yyyy/mm/dd 運動会_元のファイル名.jpg」のように変更することができます。

【GASで時短】ファイル名の一部を削除する

フォルダ内のすべてのファイルを対象に、ファイル名の一部を消すことが出来るGoogle Apps Scriptです。ドライブでファイルのコピーをすると「のコピー」が付与されますがこのような文字列を消すことができます。

【GASで時短】ファイル名に作成日を追加する

ファイル名の先頭にファイルの作成日を追加するGoogle Apps Scriptです。ドライブのファイル一覧で表示されるのは「最終更新日」だけで、作成日は各ファイルをクリックして右ペインを見ないとわかりません。わからないならファイル名に追加してしまおうというスクリプトです。「yyyy-mm-dd_元のファイル名」のように変えることができます。

【GASで時短】更新からN時間以上経過したファイルを削除する

最終更新日時からN時間以上経過したファイルを削除するGoogle Apps Scriptです。GASが自動的に吐き出すログファイルや、不要なファイルの一括削除に使えます。「削除」といってもゴミ箱へ移動する処理なので、誤って実行しても復元が可能です。

【GASで時短】ドライブのファイルリストをスプレッドシートに出力する

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。最終更新日時やオーナー、URLも出力するのでフォルダ整理する時に使えるかも。

【GASで時短】ファイルを指定回数コピーする

指定したファイルを指定した回数だけコピーするGoogle Apps Scriptです。テンプレートを受講者分コピーしたいときなどに。

【GASで時短】ファイルの親フォルダを調べる

シートに記載したファイルURLを元に、親フォルダの名前とURLを出力するGoogle Apps Scriptです。

【GASで整理】ドライブ上の同名のファイルを検索する

Googleドライブ上でファイル名が重複しているものを探すGoogle Apps Scriptです。同じ名前のファイルに苦しめられている方、いかがですか?

【GASで整理】URLリストを元にファイルをまとめて削除する

シートにGoogleドライブのファイル(URL)を記載すると、そのファイルを削除してくれるGoogle Apps Scriptです。

タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp