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

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

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

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

Q&A

解決済

3回答

6194閲覧

GoogleDriveでGASを使って一日前までのファイルを別フォルダに移動したい

hase_gawa

総合スコア6

Google Apps Script

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

0グッド

0クリップ

投稿2018/02/03 08:59

前提・実現したいこと

NASからGoogleDriveに毎晩1時にファイルをバックアップしています。
2時くらいにデータのアップロードが終了します。

その後,GoogleDriveにアップロードされたデータのうち,前日24時までに作成された
データ(フォルダ内にあるサブフォルダ・ファイルすべて)を別フォルダに自動的に移動させたいと考えています。

発生している問題

AフォルダからBフォルダへの自動移動については,下記ソースコードで足ります。

しかし,「前日24時までに作成された」という抽出をどう行えばいいのかがわかりません。
なお,前日24時までと厳密でなくてもかまいません。
毎日0時に定期実行して「24時間前までに作成されたファイルの抽出」でも問題ありません。

var hiduke=new Date();
として,現時刻を取得してから,前日の日付を抽出し,移動対象として選択するファイル
の日付を確認して前日のファイルだけ選別してから,移動させる,となると思います。

もしくは,現時刻取得,24時間前の時刻抽出,移動対象として選択するファイル
の時刻を確認して24時間以前のファイルだけ選別してから,移動させる,となると思います。

よろしくお願いします。

該当のソースコード

function moveAtoB() {
var INPUT = DriveApp.getFolderById('');
var OUTPUT = DriveApp.getFolderById('
');
var iterator4files = INPUT.getFiles();
while (iterator4files.hasNext()) {
var file = iterator4files.next();
OUTPUT.addFile(file);
INPUT.removeFile(file);
}
};

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

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

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

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

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

guest

回答3

0

ファイル及びフォルダに対し、getLastUpdated() すれば目的は果たせるかと思います。

ロジックとしては hase_gawaさん のイメージされているとおりで良いと思いますので、サンプルコード中、該当部分を修正してみました。
動作確認等はしておりませんので、参考程度にどうぞ。

javascript

1while (iterator4files.hasNext()) { 2 var file = iterator4files.next(); 3 if(file.getLastUpdated() - {前日の日付} > 0){ 4 OUTPUT.addFile(file); 5 INPUT.removeFile(file); 6 } 7}

[参考]
https://developers.google.com/apps-script/reference/drive/file#getLastUpdated()
https://developers.google.com/apps-script/reference/drive/folder#getLastUpdated()

※リンク先コピペミスしていましたので修正しました。

※ hase_gawaさん のおっしゃられていたエラーの原因は単純なコードのタイプミスでした。(file.getLastUpdate() → file.getLastUpDated())
簡易ですが、最終更新日付のチェック、テストにて動作確認済みです。
すでに解決済みとなっておりますが、誰かの参考になれば幸いです。

投稿2018/02/07 02:22

編集2018/02/10 15:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自己解決

お返事ありがとうございました。

いただいたコードを試してみましたが,エラーが出てしまいました。

結局,運用で15分毎に作成されるファイルを24時までの分だけGoogleDriveにバックアップして,
スクリプトは移動だけさせるようにしました。

コピー元からコピー先へサブフォルダ含めてすべてコピーをして,コピー終了後にコピー元フォルダ内のサブフォルダ及びファイルをゴミ箱へ移動するスクリプトにしました。

(参考)
Google Driveでディレクトリごとまるっとコピーしてやるぜ!

GoogleAppsScript

1function myFunction() { 2 var folders = DriveApp.getFoldersByName("folder_A"); 3 //コピー元フォルダの指定。folder_Aの「名前」で指定,他のフォルダ・ゴミ箱に 4 //同名フォルダがあるとそのフォルダもコピー元になってしまう。 5 //そのため,フォルダ名は固有の名前にすること。 6 var dest = DriveApp.getFolderById('folder_B_ID'); 7 //コピー先フォルダの指定。コピー先フォルダをIDで指定する。 8 while(folders.hasNext()) { 9 var folder = folders.next(); 10 folderCopy(folder, dest); 11 } 12 trash(); 13} 14 15function folderCopy(folder, dest) { 16 //コピー元サブフォルダ・ファイルをコピー先へコピー 17 var folders = folder.getFolders(); 18 var files = folder.getFiles(); 19 20 while(files.hasNext()) { 21 var file = files.next(); 22 // file.makeCopy(dest);とすると、****のコピーというファイル名になるので…。 23 file.makeCopy(file.getName(), dest); 24 //サブフォルダ以下のファイル・フォルダが多いとスクリプトの実行制限時間6分を 25 //超過してエラーになることがある。EAPに申請して申請が通るとスクリプト実行時間 26 //が30分に延長される。 27 // https://developers.google.com/apps-script/guides/apps-script-eap 28 } 29 30 while(folders.hasNext()) { 31 var subFolder = folders.next(); 32 var folderName = subFolder.getName(); 33 var copyFolder = dest.createFolder(folderName); 34 folderCopy(subFolder, copyFolder); 35 } 36} 37 38function trash() { 39 //コピー元フォルダfolder_Aのサブフォルダ・ファイルをすべてゴミ箱へ移動。 40 var removefolders = DriveApp.getFoldersByName("folder_A"); 41 var removefolder = removefolders.next(); 42 var subfolders = removefolder.getFolders(); 43 while(subfolders.hasNext()) { 44 var trashFolder = subfolders.next(); 45 trashFolder.setTrashed(true) 46} 47}

投稿2018/02/09 23:35

編集2018/02/09 23:40
hase_gawa

総合スコア6

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

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

0

私が以前に調べた際には日付でのファイル/フォルダの検索は出来ませんでした。
GASの挙動だとgetFolderById()では、作成された順番(ドライブに追加された順番)で、
レスポンスが返ってくるので多少は活用できるかなと思われます。
しかし基本的にはファイル/フォルダを抽出してから、それらに対して作成日や更新日を取得する流れになると思います。

明確な回答になっておりませんが回答としては、
一度ファイルをリスト化し、追加日時を確認してから移動する必要がある。
というのが回答かと思います。
他にも気をつけることはありますが、がんばってください!

投稿2018/02/06 03:20

hot-lemoned

総合スコア63

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問