DriveScript

【GAS】Googleドライブのファイルをコピー・移動する

makeCopy – Googleドライブのファイルをコピーする

GoogleドライブのファイルをコピーするにはファイルオブジェクトのmakeCopyメソッドを使います。

フォルダにこんなファイルがあるとします。

このファイルをコピーするコード

const copyFile = () => {
  const driveApp = DriveApp
  const folder = driveApp.getFolderById('フォルダIDが入ります')
  const files = folder.getFiles()
  while (files.hasNext()) {
    const file = files.next()
    const copiedFile = file.makeCopy()
    console.log(copiedFile)
  }
}


実行すると、、、


同一のフォルダにコピーされ、コピー元のファイル名に「 のコピー」がつきます。

コピー先のフォルダを変更したいとき

コピー先のフォルダを別のフォルダにするときは、

const copyFile = () => {
  const driveApp = DriveApp
  const folder = driveApp.getFolderById('コピー元のファイルがあるフォルダのIDが入ります')
  const copyFolder = driveApp.getFolderById('コピー先のフォルダIDが入ります')
  const files = folder.getFiles()
  while (files.hasNext()) {
    const file = files.next()
    const copiedFile = file.makeCopy(copyFolder)
    console.log(copiedFile)
  }
}

8行目のfile.makeCopy( )の( )の中にコピー先のフォルダオブジェクトを指定します。

実行結果


うおっ、2つもコピーがありますね。

2つある理由はコピー元のフォルダに2つファイルが存在しているからです。

コピー元のフォルダ

ほら、ファイルが2つありますよね。よってコピーされるファイルも2つなんです。

ファイルを指定してコピーしたい

2つのファイルをコピーするんじゃなくて、任意のファイルを1つだけコピーしたいとします。

たとえば、コピー元のフォルダの「コピーされるファイル のコピー」だけコピーしたいときはどうしましょうか?

ファイル名で特定するのが簡単そうですよね。

const copyFile = () => {
  const driveApp = DriveApp
  const folder = driveApp.getFolderById('コピー元のファイルがあるフォルダのIDが入ります')
  const copyFolder = driveApp.getFolderById('コピー先のフォルダIDが入ります')
  const files = folder.getFiles()
  while (files.hasNext()) {
    const file = files.next()
    if (file.getName() !== 'コピーされるファイル のコピー') return
    const copiedFile = file.makeCopy(copyFolder)
    console.log(copiedFile)
  }
}


付け足したのは8行目です。ファイル名が「コピーされるファイル のコピー」の場合のみ、9行目以下のコードが実行されるようにしています。

こんなふうに条件を指定すると任意のファイルのコピーが可能です。

moveTo – ファイルを移動する

コピーと似たようなメソッドに、ファイルを移動するmoveToメソッドがあります。

移動するとどうなるのか試してみます。

コード

const copyFile = () => {
  const driveApp = DriveApp
  const folder = driveApp.getFolderById('コピー元のファイルがあるフォルダのIDが入ります')
  const copyFolder = driveApp.getFolderById('コピー先のフォルダIDが入ります')
  const files = folder.getFiles()
  while (files.hasNext()) {
    const file = files.next()
    if (file.getName() !== 'コピーされるファイル のコピー') return
    const movedFile = file.moveTo(copyFolder)
    console.log(movedFile)
  }
}

実行するとコピー元フォルダにあった「コピーされるファイル のコピー」は雲散霧消しておりまして、

コピー先フォルダに移動してます。あれま。


移動するので元のフォルダからはなくなります。

当たり前ですよね。


元のフォルダにファイルを残しておきたいときはmakeCopyメソッドを使うといいでしょうし、元のフォルダに残しておきたくないときはmoveToメソッドです。

makeCopy( )は( )の中に何も入れなくてもエラーになりませんが、moveTo( )は移動のためのメソッドなので、移動先がないとエラーになります。

普通に考えればそりゃそうなんですが、テンパってると気づかなかったりするのでご注意を。


ソニックブーム

Copied title and URL