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

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

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

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

Q&A

解決済

1回答

1053閲覧

GASでGoogleドライブ内にあるファイルを別のフォルダに一括コピーしたい

eva_mcfly

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2023/01/19 02:31

編集2023/01/19 02:49

前提

GAS初心者です
Googleフォルダ内にある複数のファイルを、別のGoogleフォルダ2にコピーするGASを作成したいです

実現したいこと

・スプレットシートにコピー元のフォルダIDとコピー先のフォルダIDを記載する
・GASを実行したらコピー元フォルダ内にある全てのファイルが、コピー先フォルダ内に複製する

発生している問題・エラーメッセージ

エラーの発生はなし フォルダ内にあるファイルではなくフォルダ毎ファイルされてしまう ネット上に落ちているコードを使っているので内容はよく分かっていないです・・・すみません

該当のソースコード

VBA

1function copyandmove() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); 3 const sheets=ss.getSheetByName("シート2"); 4 var srcFolderId = sheets.getRange("A1").getValue();// コピー元フォルダ 5 var dstFolderId = sheets.getRange("A2").getValue();// コピー先フォルダ 6 7 var srcFolder = DriveApp.getFolderById(srcFolderId); 8 var dstFolder = DriveApp.getFolderById(dstFolderId); 9 10 var dstFolderName = srcFolder.getName(); 11 12 var newFolder = dstFolder.createFolder(dstFolderName); 13 copy(srcFolder, newFolder);//コピー元,コピー先 14} 15 16function copy(srcFolder, newFolder){ 17 var srcFiles = srcFolder.getFiles();//フォルダ内ファイルをゲット 18 while(srcFiles.hasNext()) { 19 var srcFile = srcFiles.next(); 20 Logger.log(srcFile.getName()); 21 srcFile.makeCopy(srcFile.getName(), newFolder); 22 } 23 var srcFolders = srcFolder.getFolders();//フォルダ内フォルダをゲット 24 while(srcFolders.hasNext()) { 25 var nextSrcFolder = srcFolders.next(); 26 Logger.log(nextSrcFolder.getName()); 27 var nextNewFolder = newFolder.createFolder(nextSrcFolder.getName()); 28 copy(nextSrcFolder, nextNewFolder); //再帰処理 29 } 30}

試したこと

GAS初心者で、拾ってきたコードで試しております。
そのため、どのように修正すべきかがわからず困っております。
問題点とは別の話ですが、直接コードにフォルダIDを指定するのではなく、
スプレットシートのセルに記載したIDを参照するようなコードに書き換えています。
自身だけはなく複数名で利用するためです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

YAmaGNZ

2023/01/19 02:43

Aというフォルダ内のファイルをBというフォルダにコピーしたいが、現状だとBのフォルダ内にAというフォルダが作成されそこの下にファイルがコピーされるということでしょうか? そうなのであれば、現状のコードの意味を理解すればどのように変更すべきか分かるかと思います。
eva_mcfly

2023/01/19 02:46

はい!まさにおっしゃる通りです!
guest

回答1

0

自己解決

function copyandmove() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets=ss.getSheetByName("シート2");
var srcFolderId = sheets.getRange("A1").getValue();
var dstFolderId = sheets.getRange("A2").getValue();

var srcFolder = DriveApp.getFolderById(srcFolderId);
var dstFolder = DriveApp.getFolderById(dstFolderId);

var dstFolderName = srcFolder.getName();

//var newFolder = dstFolder.createFolder(dstFolderName);
copy(srcFolder, dstFolder);//, newFolder);//コピー元,コピー先
}

function copy(srcFolder, dstFolder){//, newFolder){
var srcFiles = srcFolder.getFiles();//フォルダ内ファイルをゲット
while(srcFiles.hasNext()) {
var srcFile = srcFiles.next();
Logger.log(srcFile.getName());
srcFile.makeCopy(srcFile.getName(), dstFolder);//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); //再帰処理
}
}

投稿2023/01/19 03:14

eva_mcfly

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問