10

我有一个 Apps 脚本,它创建多个文件并将它们移动到一个文件夹中。有没有办法将文件直接放在文件夹中,或者我首先必须获取文件然后将其复制到适当的文件夹,然后将其从根文件夹中删除,如下所示:

folder=DocsList.createFolder("MyFolder");
var file=DocsList.createFile(blob);
file.addToFolder(folder);
file.removeFromFolder(DocsList.getRootFolder());

这样做的问题是,如果您打开 Drive,您会看到该文件首先放置在根文件夹中,然后移动到MyFolder. 所以在执行removeFromFolder.

4

5 回答 5

12

刚刚测试了以下代码

function Test() {
  DocsList.createFolder('Folder1').createFolder('Subfolder1').createFile('File1', 'Empty');
}

它按预期工作,即File1在新创建的文件夹中创建了一个新文档My Drive\Folder1\Subfolder1

于 2012-08-11T13:55:11.010 回答
9

DocsList 不再有效,已被 DriveAPI、Google App Services 和 Advanced Google services 取代。

在这里我留下我的测试代码,这段代码创建文件夹-子文件夹-google文件-pdf-并以各种方式将它们存储在文件夹和子文件夹中,希望对您有所帮助

function Drive_2015() {   //busca un folder, si no lo hay lo crea y crea 2 sub carpetas un google document copiado en cada una de ellas
  var name='folder de prueba';
  var carpeta = DriveApp.getRootFolder().searchFolders("title contains '"+name+"'");
  if (carpeta.hasNext()===true) {    
      while (carpeta.hasNext()) {
      var folder = carpeta.next();
      Logger.log(folder.getName()+' '+folder.getId());
      }
  }else{
    var folder=DriveApp.getRootFolder().createFolder(name);

    var parent=DriveApp.getFolderById(folder.getId());   // get parent folder
    var folder2 =parent.createFolder('Subfolder');   // 1° way to create sub folder
    var folder3=folder.createFolder(name+1);// 2° way to create sub folder (and more easy)

    var doc = DocumentApp.create('Documento sta');
    var sheet = SpreadsheetApp.create('Spreadsheet sta');
    Utilities.sleep(300); // este retardo es para garantizar en el user-side la creacion del nuevo archivo
    var files = DriveApp.getFilesByName('Documento sta');// or Id var file = DriveApp.getFileById(doc.getId());
    while (files.hasNext()) {
      var file = files.next();
      Logger.log('ojo '+file.getName());
      file.makeCopy(folder3);
      file.makeCopy(folder2);
      var file2=file.makeCopy(folder);
      file2.setName('Acta individual del alumno')
      var blob = file2.getAs('application/pdf'); 
      var file2pdf = folder.createFile(blob);
      var file2pdf = DriveApp.getFileById(file2pdf.getId());
      var file2pdf=file2pdf.makeCopy(folder);
      Logger.log('se creó: '+file.getName()+' en la carpeta: '+folder.getName()+' el PDF es: '+file2pdf.getId());
      DriveApp.getFileById(file2pdf.getId()).setTrashed(true)
      DriveApp.getFileById(docid).setTrashed(true)
      }
  }
}
于 2015-06-25T14:49:20.677 回答
8

自 2015 年起,您应该使用 DriveApp 服务来管理 Google Drive 中的文件。DriveApp 有一个 Folder 类,允许您直接在文件夹中创建文件。

function createFilesInFolder() {
  //This creates the folder
  var folder = DriveApp.createFolder('My Folder');
  //This creates a file in the folder
  var file = folder.createFile('My File.txt', 
                               'Lorem ipsum', 
                               MimeType.PLAIN_TEXT);
}
于 2015-06-08T22:32:56.510 回答
4

我只是想发表评论(但没有 50 声望点)。

当原始帖子无效时,上述答案有效的原因是 .createFolder 适用于 DocsList.createFolder (在根目录中创建文件夹)和 Folder.createFolder ,后者在当前文件夹中创建子文件夹。

这对除了我之外的每个人来说都是显而易见的——但我花了很长时间才意识到:-)

于 2013-12-23T11:24:26.053 回答
0

GAS 现在允许使用 .moveTo 更快地移动文件。假设您想要构建一个可以编辑的文档。此代码允许您创建文件夹、创建文档、移动文档,最后点击 DocumentApp 编辑文件。

前任:

const saveTo = DriveApp.createFolder("FolderName").next().getId();
const newDoc = DocumentApp.create("New Doc"), 
  newDocId = DriveApp.getFileById(newDoc.getId()).moveTo(saveTo);
于 2020-08-27T03:02:55.563 回答