GASで簡単!Googleドライブからファイル名を取得する方法

GASを使ってGoogleドライブからファイル名を取得したいんだけど、やり方が分からなくて…
猫男
猫男
catman
catman
それなら任せろ。catmanがGASを使ってドライブからファイル名を取得する方法を教えてやろう!

GASでGoogleドライブからファイル名を取得する基本

GAS(Google Apps Script)を使えば、簡単にGoogleドライブ内のファイル名を取得できる。

まずは基本形からだ。

 function listFileNamesInFolder() {
 var folder = DriveApp.getFolderById('フォルダIDをここに');
 var files = folder.getFiles();
 while (files.hasNext()) {
 var file = files.next();
 Logger.log(file.getName());
 }
 } 

このスクリプトは指定されたフォルダ内のすべてのファイル名をログに出力する。

まず、DriveApp.getFolderById(‘フォルダIDをここに’)で特定のフォルダを取得する。

次に、そのフォルダ内のファイルをfolder.getFiles()で取得し、ループを使って各ファイルの名前をfile.getName()で取得する。

特定の条件でファイル名をフィルターする方法

特定の条件でファイル名をフィルターしたい時もあるだろう。

たとえば、特定のファイル拡張子を持つファイルだけを取得する。

 function listSpecificFileType() {
 var folder = DriveApp.getFolderById('フォルダIDをここに');
 var files = folder.getFiles();
 while (files.hasNext()) {
 var file = files.next();
 if (file.getName().endsWith('.txt')) {
 Logger.log(file.getName());
 }
 }
 } 

このスクリプトは.txtファイルの名前だけをログに出力する。

ファイル名に対して、endsWith(‘.txt’)を条件にしてフィルターをかけることで、特定の拡張子を持つファイル名のみを取得することができる。

フォルダ内のファイル名を再帰的に取得する方法

フォルダの中にサブフォルダがある場合も、再帰的にすべてのファイル名を取得することができる。

 function listAllFileNamesRecursively(folder) {
 var files = folder.getFiles();
 while (files.hasNext()) {
 var file = files.next();
 Logger.log(file.getName());
 }
 var subfolders = folder.getFolders();
 while (subfolders.hasNext()) {
 var subfolder = subfolders.next();
 listAllFileNamesRecursively(subfolder); 
 }
 }

function main() {
 var rootFolder = DriveApp.getFolderById('フォルダIDをここに');
 listAllFileNamesRecursively(rootFolder);
 } 

このスクリプトはフォルダ内のすべてのファイルとサブフォルダ内のファイル名をログに出力する。

フォルダとそのサブフォルダを再帰的に探索することで、すべてのファイルを取得できる。

 

練習問題

  • GASを使ってGoogleドライブのルートディレクトリにあるすべてのファイル名を取得し、ログに出力せよ。
  • 拡張子が.jpgのファイル名だけを取得するスクリプトを書いてみよう。
  • 再帰を使って特定のフォルダとそのすべてのサブフォルダ内のファイル名を取得するスクリプトを完成させよう。

 

解答・解説

 function listRootFileNames() {
 var files = DriveApp.getRootFolder().getFiles();
 while (files.hasNext()) {
 var file = files.next();
 Logger.log(file.getName());
 }
 } 

このスクリプトはDriveApp.getRootFolder().getFiles()を使用して、ルートフォルダのすべてのファイル名を取得する。

 function listJpgFiles() {
 var folder = DriveApp.getFolderById('フォルダIDをここに');
 var files = folder.getFiles();
 while (files.hasNext()) {
 var file = files.next();
 if (file.getName().endsWith('.jpg')) {
 Logger.log(file.getName());
 }
 }
 } 

拡張子が.jpgのファイルを取得するには、名前をフィルターする条件にendsWith(‘.jpg’)を使う。

 function listAllFilesRecursively(folder) {
 var files = folder.getFiles();
 while (files.hasNext()) {
 var file = files.next();
 Logger.log(file.getName());
 }
 var subfolders = folder.getFolders();
 while (subfolders.hasNext()) {
 var subfolder = subfolders.next();
 listAllFilesRecursively(subfolder); 
 }
 }

function executeRecursiveListing() {
 var rootFolder = DriveApp.getFolderById('フォルダIDをここに');
 listAllFilesRecursively(rootFolder);
 } 

再帰的にフォルダ内のすべてのファイルを取得するこのスクリプトは、最初にフォルダ内のすべてのファイルを取得し、その後サブフォルダを再帰的に探索している。

ありがとうcatman!これでドライブから必要なファイル名を取得できそうだ!すごく助かったよ!
猫男
猫男
catman
catman
よし!これでドライブの操作もバッチリだな。次回も何か困ったら呼ぶといいさ!