2

Google アプリ スクリプトを使用して、Google ドライブにフォルダを作成しています。ドライブに重複をさせたくないので、フォルダが存在するかどうかを調べる関数を作成しました。

すべてのフォルダー名を配列に入れ、フォルダー名がその配列に存在するかどうかを確認しています。ただし、常にfalseを返します...

ここでどこが間違っているかわかりますか?または、フォルダーがドライブに存在するかどうかを確認するより良い方法はありますか??

function doesContainerExist(container) {
  var folders = DriveApp.getFolders();
  var Folders = new Array;
  var boolean;

  while(folders.hasNext()) {
    Folders.push(folders.next());
  }

  if(Folders.indexOf(container) == -1) {
    boolean = false;
  } else {
    boolean = true;
  }
  Logger.log(container);

  return boolean;

};
4

3 に答える 3

7

フォルダーが既に存在するかどうかを確認する別の効率的な方法があります。これは、テスト関数を使用したコードです。

function testTest(){
  Logger.log(testFolder('Photos'));// returns true if folder exists, false if it doesn't
}

function testFolder(folderName){
  var exist = true;
  try{var testFolder = DocsList.getFolder(folderName)}
  catch(err){exist=false}
  return exist;
}

最終的な目的はフォルダーを作成することなので、スクリプトの「catch」部分内にフォルダーを直接作成するか、フォルダーの作成に使用する既存のコードに try/catch を統合するだけです。

于 2013-07-11T18:48:11.973 に答える
1

Folder オブジェクトを検索しようとしている間は、文字列のみを検索できます。

function doesContainerExist(container) {
  var folders = DriveApp.getFolders();
  var Folders = new Array();
  var boolean;

  while(folders.hasNext()) {
    Folders.push(folders.next().getName());
  }

  if(Folders.indexOf(container) == -1) {
    boolean = false;
  } else {
    boolean = true;
  }
  Logger.log(container);

  return boolean;

};
于 2013-07-11T16:30:00.767 に答える
0

次の関数は、パスが存在するかどうかを確認します。そうでない場合は、それを作成します。渡されたパラメーターpathは、(たとえば) 次のような文字列です 。var path = "//Main Folder/Subfolder 1/Subfolder 2"; このディレクトリを作成する場合は、createDirectory(path).

function createDirectory(path) {

  var name, folder, search, fullpath;

  // Remove slashes and trim the path
  fullpath = path.replace(/^\/*|\/*$/g, '').split("/");

  // start with the main folder
  folder = DriveApp.getRootFolder();

  for (var subfolder in fullpath) {

    name = fullpath[subfolder];
    search = folder.getFoldersByName(name);

    // If folder in current level does not exit, create it
    folder = search.hasNext() ? search.next() : folder.createFolder(name);        
  }      
  return folder;      
}

行は次のfolder = search.hasNext() ? search.next() : folder.createFolder(name);ように置き換えることができます:

if (folders.hasNext()) {
  folder = folders.next();
} else {
  folder = DriveApp.createFolder(dropbox);
}

ディレクトリが存在するかどうかを確認したいだけの場合は、代わりfolder.createFolder(name);にループを省略して andする必要がありreturn falseます。

于 2016-11-13T19:15:03.490 に答える