4

ファイルをコピーして名前を変更し、ルート フォルダーに 2 つ目のコピーを作成せずにそのコピーを特定のフォルダーに移動する方法はありますか? コピー、名前の変更、移動をさまざまな順序で組み合わせて使用​​しましたが、毎回、ルート ドライブに名前が変更されたファイルのコピーが作成されます。これはデフォルトですか?控えめに言っても迷惑です。

4

3 に答える 3

7

編集:元の質問(編集前)を見て、そこから、Googleドライブでのファイルとフォルダの仕組みについてあなたが混乱したことを理解しました。

ファイルのコピーを作成すると、ルート フォルダーに新しいファイルが作成されます。この新しいファイルを別のフォルダーに追加するときは、新しいコピーを作成せずに、このファイルにラベルを貼り付けるものと見なす必要があります。

実際にはルートと他のフォルダーの両方でファイルを見ることができますが、2 つの異なるラベルが付いたまったく同じファイルです。(そして、削除しようとして、両方の場所で削除されたことに気付きました)

新しいファイルをそのフォルダーに取得し、ルートに表示されないようにするために必要な唯一のことは、「ルートラベル」を削除することです。

それがGoogleドライブの仕組みです。そして、それについて考えて、ローカルのハードディスク ストレージと比較すると、論理的になります。ファイルを 1 つのフォルダーから同じ論理ドライブ上の別のフォルダーに移動する場合、データ (つまり、ディスク上のバイト) は移動しませんが、単にこのファイルがマップ上の別の場所にあるディスク オペレーティング システム。

したがって、Google ドライブは、何十億ものファイルを移動することはできませんが、好きなだけラベルを付けることができる (非常に) 大きなディスク ユニットと考えてください ;-) (最も重要なラベルは Google アカウント ID です!)

そして、あなたが説明したケースでこれらのラベルをいじるには、この単純な関数を試してください:

function copyAndMove(file,folder){
var newfile=file.makeCopy('copy of '+file.getName());// here you can define the copy name the way you want...
newfile.addToFolder(folder);//  add the copy to the folder
newfile.removeFromFolder(DocsList.getRootFolder());// and remove it from your root folder
}

それをテストするには、2 つの必須パラメーターを使用するだけです。fileオブジェクトfolderと、さまざまなメソッドから取得できるオブジェクトです。必要な場合の取得方法の詳細については、DocsList のドキュメントを参照してください。

于 2013-03-29T17:39:08.410 に答える
3

ええ、Google が move メソッドを提供していないのは少し奇妙です。しかし、ドライブがどのように機能し、ファイルが複数のフォルダーに属することができることを考えると、独自の動きを作成したことにはある程度の意味があります。ここに私が書いた簡単な移動関数があります:

// Moves a file to a new folder by removing all current
// parent folders and then adding the new one.
function moveFileTo(fileObj, folderObj) {
  // Attempt the move only if folderObj has a value.
  // Otherwise, the file will be left without a folder.
  // (Lost files can be found in the "All items" area.)
  if (folderObj) {
    var folders = fileObj.getParents();
    for (var i = 0; i < folders.length; i++) {
      fileObj.removeFromFolder(folders[i]);
    }
    fileObj.addToFolder(folderObj);
    return true;
  }
  return false;
}

基本的には、次のように使用します。

var file = DocsList.getFileById(fileID);
var folder = DocsList.getFolder('Some folder name');

// Make a backup copy.
var file2 = file.makeCopy('BACKUP ' + Utilities.formatDate(new Date(), Session.getTimeZone(), 'yyyy-MM-dd') + '.' + file.getName());
// Move the backup file.
if (moveFileTo(file2, folder)) {
  ...

この単純な関数はまさにその...単純であることに注意してください。所有または共有されているすべての親フォルダーを叩いても大丈夫だと想定しています。注意しないと、さまざまなユーザーのさまざまな共有フォルダー内の共有ファイルに予期しない結果が生じる可能性があります。ただし、このスクリプトのユーザーと共有されていない親フォルダーを削除するようには見えません。これは良いことです。とにかく、物事をより適切に制御するための明白な代替手段の 1 つは、「送信元」フォルダーと「送信先」フォルダーを指定することです。

于 2013-03-27T15:20:16.297 に答える