Gmailで届いたメールの添付ファイルを
「Googleドライブの指定フォルダ内に同名のファイルがない場合のみ」保存したいと考えているのですが、
上記の条件(鉤括弧内)を入れると保存ができず困っています。
コードは以下の通りです。
(下から4行目
folder.createFile(attachments[fileCnt]);
のみ残してwhile文を消すと動作します)
GoogleAppsScript
1//メッセージから添付ファイルを取得 2const attachments = messages[thCnt][meCnt].getAttachments(); 3 4for(const fileCnt in attachments) { 5 //添付ファイルのファイル名を取得 6 const fileName = attachments[fileCnt].getName(); 7 //ファイル名を元にフォルダ内から同名ファイルを探す 8 const files = folder.getFilesByName(fileName); 9 10 while (files.hasNext()) { 11 var file = files.next(); 12 if(fileName !== file.getName()) { 13 //ドライブにファイルを保存 14 folder.createFile(attachments[fileCnt]); 15 } 16 } 17}
参考にしたサイトはこちらです。
【Google Apps Script】スプレッドシートでGoogleドライブ内の指定したフォルダに指定したファイルが存在するかどうかチェックする方法
参考にしたサイトと異なるロジックのコードにしているのは何故でしょうか?
参考サイトは「指定したフォルダに同名のファイルが存在するかどうかの確認」が目的ですが、こちらは「存在しない場合に処理」をしたいので、多少短くなっています。
そうですよ「指定したフォルダに同名のファイルが存在するかどうかの確認」。
fileExists_() で、存在する場合はtrue、存在しない場合はfalseが返ってくる。
よってfalseの場合だけ処理すれば良いだけでは?
短くできると思ったのですが、そのまま真似してみます。
if(fileName !== file.getName())
!==を==に変えて条件を揃えてあげるとちゃんと動作するんですよね。
名前の比較で!==は使えないのでしょうか。
> !==を==に変えて条件を揃えてあげるとちゃんと動作するんですよね。
ちゃんと動作してないと思いますよ。
実行繰り返すと同名ファイルが倍々に増えていくのでは?
重複質問は取り下げを。https://teratail.com/questions/320898
>実行繰り返すと同名ファイルが倍々に増えていくのでは?
同名ファイルが1つ増えます。
if文の中に
console.log(`${fileName} ${file.getName()}`);
を書くと同じ左右同じファイル名が出力されます。
==にしたとき、同名ファイルが2個あると2回createFile()が実行されませんか?
もしされないのであれば、質問に記載されている物と異なるソースで実行されてます。
フォルダ内に同名ファイルが2個あるのなら、2回createFile()が実行されます。
回答2件
あなたの回答
tips
プレビュー