質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

3610閲覧

GASを使ってフォルダ内のデータを複製させる際、データの拡張子選別をしたい

mdibievj09261

総合スコア12

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/06/15 08:57

初心者です。教えてください・・・????
GASで以下のことを実現したく・・・・????

■やりたいこと
【Gドライブ_A】のなかの画像データ(複数あり)を【Gドライブ_B】になかに複製させる。
ただし、【Gドライブ_A】は、jpegとpsdが混在していて、
【Gドライブ_B】に複製させるのは、jpegだけを対象にしたい。

■できたこと
【Gドライブ_A】→【Gドライブ_B】をそのまま(拡張子選別せずに)複製させることはできました。

function myFunction() { var srcFolderId = "hogehogehoge1"; // コピー元フォルダ var dstFolderId = "hogehogehoge1"; // コピー先フォルダ var srcFolder = DriveApp.getFolderById(srcFolderId); var dstFolder = DriveApp.getFolderById(dstFolderId); var dstFolderName = srcFolder.getName(); var newFolder = dstFolder.createFolder(dstFolderName); copy(srcFolder, newFolder);//コピー元,コピー先 } function copy(srcFolder, newFolder){ var srcFiles = srcFolder.getFiles();//フォルダ内ファイルをゲット while(srcFiles.hasNext()) { var srcFile = srcFiles.next(); Logger.log(srcFile.getName()); srcFile.makeCopy(srcFile.getName(), newFolder); } var srcFolders = srcFolder.getFolders();//フォルダ内フォルダをゲット while(srcFolders.hasNext()) { var nextSrcFolder = srcFolders.next(); Logger.log(nextSrcFolder.getName()); var nextNewFolder = newFolder.createFolder(nextSrcFolder.getName()); copy(nextSrcFolder, nextNewFolder); //再帰処理 } }

どうすれば拡張子選別できるか、、わかるかたご教示ください・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

3つの方法があります。

  1. ファイル名から拡張子を取り出して分類する
  2. ファイル名から正規表現を使って分類する
  3. MIMEタイプで分類する方法

この2通りがあります。

1.の方法は、javscriptの文字列操作で取り出します

js

1function getFileExtension(filename){ 2 const dotLastIndex = filename.lastIndexOf("."); // 文字列の最後からのドットのインデックスを検索 3 return filename.slice(dotLastIndex); // 文字列を切り出す 4} 5 6const filename = srcFile.getName(); 7if( getFileExtension(filename) === ".jpeg" ){ 8 // jpegファイルの取り出し 9} 10

2つめの方法は詳しくは述べませんが、正規表現という文字列のパターンを書くのに便利なものがあります。

正規表現について詳しくはこちら

書いてみますと

js

1const filename = srcFile.getName(); 2if( /.jpeg$/.exec(filename) ){ 3 // jpegの処理 4}

3つめはMINEタイプを使って分類します。詳しくはこちら

js

1if(srcFile.getMimeType() === "image/jpeg")

これらの3つどれを使っても基本的には問題ないと思います。

--------------以下 追記------------

MIMEタイプを使って分類、結果的にjpegのみ複製させたいのですが

どこに

if(srcFile.getMimeType() === "image/jpeg")

を入れ込んでいいのか理解できず。。。。
アドバイス頂けますと幸いです。。。。????

if(srcFile.getMimeType() === "image/jpeg")

このコードは、ファイルのMINETypeをゲット(取得)して、その内容(文字列の値)が==="image/jpeg"と比較するという意味です。ということは、ファイル自体は必要なわけです。ということは、ファイルを取ってくる前だと実行できないですよね? ということは...? (ヒントです)ちょっとあとはご自身で考えてほしいなと思っています。

しばらく考えてそれでも分からなければご質問ください。

投稿2021/06/15 11:51

編集2021/06/17 03:37
nobkz

総合スコア320

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdibievj09261

2021/06/17 02:13

nobkz 様 ご教示有難うございます! 当方初心者のため、基本的なご質問を返してしまう事、お許しください。。。 MIMEタイプを使って分類、結果的にjpegのみ複製させたいのですが どこに if(srcFile.getMimeType() === "image/jpeg") を入れ込んでいいのか理解できず。。。。 アドバイス頂けますと幸いです。。。。????
nobkz

2021/06/17 03:24

なるほど、少し回答に追記しますね。
mdibievj09261

2021/06/18 02:48

nobkz 様 御返信有難うございます! 遅くなり申し訳ございません。 そして、丁寧に有難うございます。。。お優しいヒントです・・・ 今、これかも、というところまで来ていて、最終チェック中です。。。 たぶんですが、、、大丈夫な気がします。 最終チェック後、改めて御礼のご報告させて頂きます。
mdibievj09261

2021/06/18 05:38

nobkz 様 最終チェックが終わり、無事に取得が確認できました…! フォルダ内ファイルをゲットをゲットしたあとにインサートしたら取れました・・・! (pngも取りたかったので修正しました) while(srcFiles.hasNext()) { var srcFile = srcFiles.next(); Logger.log(srcFile.getName()); if(srcFile.getMimeType() === "image/jpeg"||srcFile.getMimeType() === "image/png" ) srcFile.makeCopy(srcFile.getName(), newFolder); ご丁寧に本当に有難うございます・・・!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問