【Google Apps Script】ディレクトリからファイル名を取得し、指定したファイル名の有無を確認する。
こういった事務的な処理は基本だけど、大事。
はろー、yukiです。
ファイル名有無の確認は、すなわちファイル有無の確認。
環境がローカルPCでもクラウドでも、サーバでもやることは同じです。
確認を実行する言語が変わっても、処理は大差ありません。
(言語によりコーディングの長短はあると思います)
今回は、Google Drive内で実施するので、Google Apps Scriptを使用しました。
コードは下記になります。
//////////////////////////////////////////////////////////////////////////////// /// /// /// ディレクトリからファイル名を取得し、指定したファイル名の有無を確認 /// /// /// //////////////////////////////////////////////////////////////////////////////// var fileDir = "ここにディレクトリのID"; var fileName = "ここにファイル名"; function searchFile() { // 既存ファイルの確認 var oldFiles = DriveApp.getFolderById(fileDir).getFiles(); var oldFileAry = []; var countOldFileAry = 0; // 変数oldFileAryの配列キーに使用 var countMakeFile = 0; // ファイル名が一致する場合に回数をカウント // getFilesメソッド // 戻り値はイテレータ(Drive内の全てのファイルのコレクション) // https://developers.google.com/apps-script/reference/drive/drive-app#getfiles // イテレータの詳細は下記URL // https://qiita.com/kura07/items/cf168a7ea20e8c2554c6 while(oldFiles.hasNext()){ oldFileAry[countOldFileAry] = oldFiles.next().getName(); countOldFileAry++; } // hasNextメソッド ※変数oldFilesはイテレータのため // 戻り値はBoolean型 // https://developers.google.com/apps-script/reference/drive/file-iterator // nextメソッド // 戻り値はオブジェクト(ファイル) // https://developers.google.com/apps-script/reference/drive/file-iterator#next // getNameメソッド // 戻り値はファイル名 // https://developers.google.com/apps-script/reference/drive/file#getname // 指定したファイル名と同じファイル名の有無を確認 for(var i = 0; i < oldFileAry.length; i++){ if(fileName == oldFileAry[i]){ countMakeFile++; }else{ // 指定したファイル名は存在しない // Logger.log("Not same, oldFile : %s, fileName : %s", oldFileAry[i], fileName); } } // 指定したファイル名がない場合、該当ファイルを作成 // ※countMakeFileが0の時、同じファイル名がない if(countMakeFile == 0){ // ここに処理を記述 // // ファイル出力 // var makeFile = Drive.Files.insert(fileName, fileDir); // }else{ // ountMakeFileが1の時、同じファイル名がすでにある // Logger.log("countMakeFile : %s", countMakeFile); } }
指定したファイル名がない時の処理は、その他にも色々とあると思います。
ファイル名をスプレッドシートのセルに入力するとか。単にログ出力するとか。
VBAではイテレータは扱わないので、Excelマクロを使う方にとっては新鮮かも。
僕がイテレータを初めて見たのは、pythonを勉強を始めた6年くらい前のことで、調べて思い出したくらいです。
next()
メソッドを使うあたり、繰り返し処理に適した配列と言えそうです。
ちなみに、有無を確認し、何かを実行する処理は、もっと短くできないものでしょうか。
(なんか、いつも回数カウントを用意している気がする。。。)
以上。