web-dev-qa-db-ja.com

Googleアプリスクリプト:Googleドライブのファイルを削除する方法

ファイルを削除するGoogle Appsスクリプトを作成するにはどうすればよいですか。

これはファイルを見つけます:

var ExistingFiles = DocsList.find(fileName);

だが DocsList.deleteFileはファイルを削除するために存在しません。

それらのファイルを別のフォルダまたはゴミ箱に移動する方法はありますか?

私が検討する他の回避策は、同じ名前の既存のファイルを上書きできるようにすることです。

現在、MyDriveで既に使用されている名前のファイルを作成する場合、同じ名前の2番目のファイルが作成されます。 1つのファイルを保持したい(新しいファイルは保持され、古いファイルは失われる)。

17
user1962847

DocsListサービスは非推奨になりました。この回答は、新しいDriveAppサービスを使用しています。

Advanced Drive Serviceを使用することもできます。このサービスを使用すると、ファイルをゴミ箱に送信せずに削除できます。後でごみ箱フォルダが空にならないようにするために、ファイルをごみ箱に送信せずに削除したい場合があります。 Advanced Drive Serviceにはremoveメソッドがあり、ファイルをごみ箱フォルダーに送信せずに削除します。高度なサービスは、HTTPS GETまたはPOSTリクエストを行う必要なしに、APIと同じ機能の多くを備えています。

_function delteFile(myFileName) {
  var allFiles, idToDLET, myFolder, rtrnFromDLET, thisFile;

  myFolder = DriveApp.getFolderById('Put_The_Folder_ID_Here');

  allFiles = myFolder.getFilesByName(myFileName);

  while (allFiles.hasNext()) {//If there is another element in the iterator
    thisFile = allFiles.next();
    idToDLET = thisFile.getId();
    //Logger.log('idToDLET: ' + idToDLET);

    rtrnFromDLET = Drive.Files.remove(idToDLET);
  };
};
_

これは、DriveAppサービスとDrive APIを組み合わせて、ファイルをゴミ箱に送らずに削除します。 Drive APIメソッド.remove(id)にはファイルIDが必要です。ファイルIDは利用できないが、ファイル名は利用できる場合は、まずファイルを名前で検索してから、ファイルIDを取得できます。

DriveAPIを使用するには、ResourcesAdvanced Google Servicesメニューから追加する必要があります。 Drive APIを[〜#〜] on [〜#〜]に設定します。 [〜#〜]および[〜#〜] Google Developers ConsoleでDrive APIがオンになっていることを確認してください。 [〜#〜] both [〜#〜]の場所でオンになっていない場合、使用できません。

18
Alan Wells

このコードはDocsListクラスを使用していますが、現在は非推奨です。

これを試して :

function test(){
deleteDocByName('Name-of-the-file-to-delete')
}

function deleteDocByName(fileName){
  var docs=DocsList.find(fileName)
    for(n=0;n<docs.length;++n){
     if(docs[n].getName() == fileName){
      var ID = docs[n].getId()
      DocsList.getFileById(ID).setTrashed(true)
      }
     }
    }

同じ名前のドキュメントを多数持つことができるので、forループを使用してドキュメントの配列内のすべてのドキュメントを取得し、必要に応じて1つずつ削除しました。

スクリプトでの使用を簡単にするために、パラメーターとしてファイル名を指定した関数を使用しました。テスト関数を使用して試してみてください。

注:この名前のファイルはすべてゴミ箱に入れられることに注意してください(そして回復可能です;-)

質問の最後の部分について最新のものを保持し、古いものを削除することについては、(最後にアクセスした日付と時刻を読み取ることによって)可能ですが、削除することをお勧めします同じ名前の新しいファイルを作成する前の古いファイル...はるかに論理的で安全です!

8
Serge insas

これで、ファイルがスプレッドシート、ドキュメントなどの場合は、次を使用できます。

 DriveApp.getFileById(spreadsheet.getId()).setTrashed(true);

または、スプレッドシートやドキュメントなどの代わりにファイルが既にある場合は、次のように使用できます。

file.setTrashed(true);
7

サービスDocsListは廃止されましたが、クラスフォルダーの参照から、settrashedメソッドは引き続き有効です。

https://developers.google.com/apps-script/reference/drive/folder#settrashedtrashed

したがって、これは単純に機能するはずです:

ExistingFiles.settrashed(true);
3

Drive APIを使用せずにこれを行う別の方法を次に示します。 (アランの反応に基づく)。

function deleteFile(fileName, folderName) {
  var  myFolder, allFiles, file;
  myFolder = DriveApp.getFoldersByName(folderName).next();

  allFiles = myFolder.getFilesByName(fileName);

  while (allFiles.hasNext()) {
    file = allFiles.next();
    file.getParents().next().removeFile(file);
  }
}
2
gentilmente