DriveScript

【GAS】Googleドライブのファイル名を変更する

setName – Googleドライブのファイル名を変更

Googleドライブのファイル名をGASで変更するにはsetNameメソッドを使います。

setNameメソッドはファイルオブジェクトのメソッドです。

ではやってみます。


Googleドライブにこんなファイルがあるものとします。


ファイル名は「Googleドキュメント取得用」です。

これを「Googleドキュメント名前変更」と変えます。


コード

const updateFileName = () => {
  const driveApp = DriveApp
  const folder = driveApp.getFolderById('フォルダIDが入ります')
  const files = folder.getFiles()
  while (files.hasNext()) {
    const file = files.next()
    const updatedFile = file.setName('Googleドキュメント名前変更')
    console.log(updatedFile)
  }
}


実行結果


無事にファイル名が変更されてます。

folder.getFiles()で取得できるのはイテレーター

ところで、folder.getFiles()以降のこの記述ってなんなんでしょうかね?

  const files = folder.getFiles()  
  while (files.hasNext()) {
    const file = files.next()
    const updatedFile = file.setName('Googleドキュメント名前変更')
    console.log(updatedFile)
  }

なぜわざわざwhile文をつかったり、next()とかいう見慣れないメソッドを使っているのでしょうか?


実はメソッド名がgetFilesなのでファイルの配列が取得できるように錯覚してしまいますが、取得できるのはファイルイテレーターなんです。

ファイルイテレーターっていうのは、複数のファイルを反復処理するためのオブジェクトです。

例えて言いますと、できあがったお団子が並んだ状態が配列。

イテレーターはお団子製造機です。

で、お団子製造機に「ネクスト!」と叫ぶと次のお団子が出てくる寸法です。

while文を使う理由

while文の中にfiles.hasNext()と書かれていますね。

hasNextメソッドは「次の要素はあるのか!?」を確認するメソッドです。

while文と組み合わせると、「次の要素はあるのか!?」「はいっ!あります!」「よし!じゃあネクストだ!」「次は!?」・・・と繰り返すことになります。


単純なfor文と組み合わせて「ネクスト!」を連呼していると、次の要素がない場合にエラーになります。

そこで、while文と組み合わせて、次の要素がある場合だけ繰り返すという処理を行っているんです。

setNameで特定のファイルのみ名前を変更したいとき

さて、setNameでファイル名を変更できるのはわかりましたが、上のコードだとフォルダ内にあるすべてのファイルの名称が変更されてしまいます。

もし特定のファイルのみ変更したい場合はどうするか?

このようにフォルダに3つのファイルがあるとします。

このうち「Googleドキュメント名前変更2」のみ「これだけよ」に名前を変更したいものとします。

コード

const updateFileName = () => {
  const driveApp = DriveApp
  const folder = driveApp.getFolderById('フォルダIDが入ります')
  const files = folder.getFiles()
  while (files.hasNext()) {
    const file = files.next()
    if (file.getName() === 'Googleドキュメント名前変更2') file.setName('これだけよ')
  }
}


実行結果

はい、ちゃんと「Googleドキュメント名前変更2」だけ名前の変更ができました。


今のは一例ですが、ファイルの条件を指定して変更すればいいんです。たとえばファイル名とか、更新日時とか、ファイルの種類とか。

なにしろ変更したいファイルを一意に特定できる条件を指定するのが大事です。


変更しようか、ファイル名

Copied title and URL