【问题标题】:Move Folder Using App Script使用 App 脚本移动文件夹
【发布时间】:2018-02-26 01:45:48
【问题描述】:

所以我是 JS 的新手,并试图在我工作的公司构建一个内部操作程序。下面是我的代码的第一部分。我创建了一个谷歌表单,并设置了一个触发器,以便在单击提交按钮时启动下面的代码。触发器有效,前两个功能有效,但我似乎无法让 Karrie 文件夹从根目录移动到子文件夹 ID(我确实有正确的 ID,但在这篇文章中省略了它)。也许我正在向后做这一切,所以任何帮助将不胜感激。

// Create Karrie Folder In Root
function start() {

var sourceFolder = "Property Template";
var targetFolder = "Karrie"; 
var source = DriveApp.getFoldersByName(sourceFolder);
var target = DriveApp.createFolder(targetFolder);
if (source.hasNext()) {
  copyFolder(source.next(), target);}}

// Adds Property data to Karrie Folder
function copyFolder(source, target) {
var folders = source.getFolders();
var files   = source.getFiles();
while(files.hasNext()) {
  var file = files.next();
  file.makeCopy(file.getName(), target);}

// Adds Photo Folders to Karrie Folder
while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var targetFolder = target.createFolder(folderName);
  copyFolder(subFolder, targetFolder);}} 


// Moves Karrie folder to propertie folder
function MoveFiles(){
var files = DriveApp.getFolderByName("Karrie");
   var destination = DriveApp.getFolderById("ID NA");
   destination.addFolder(files);}

Debugger

【问题讨论】:

    标签: google-apps-script google-drive-api


    【解决方案1】:

    我了解到您脚本中的 MoveFiles() 不起作用。如果我的理解是正确的,那么这个修改呢?

    修改点:

    • 要移动文件夹,需要移动文件夹的父级。
    • 但是当addFolder()用于文件夹时,文件夹有2个父文件夹。
      • 因此必须删除原始父级。
    • 没有getFolderByName()。请使用getFoldersByName()

    修改后的脚本:

    function MoveFiles(){
      var folder = DriveApp.getFoldersByName("Karrie").next();
      var destination = DriveApp.getFolderById("ID NA");
      destination.addFolder(folder);
      folder.getParents().next().removeFolder(folder);
    }
    

    注意:

    • 在此脚本中,"Karrie" 的文件夹和父文件夹分别假设在 Google Drive 中只有一个。

    参考资料:

    如果我误解了你的问题,请告诉我。我想修改它。

    编辑1:

    运行这个函数时,Logger.log(r)的ID是否显示“Karrie”的folderId?

    function sample() {
      var r = DriveApp.getFoldersByName("Karrie").next().getId();
      Logger.log(r)
    }
    

    编辑 2:

    请确认并考虑以下几点。

    1. 再次确认文件夹名称和文件夹是否存在。
    2. 运行sample()并确认“Karrie”的文件夹ID。
    3. 确认是否没有同名函数。
    4. 我能问你“Karrie”的文件夹ID吗?如果使用DriveApp.getFoldersByName("Karrie").next().getId()无法检索文件夹ID,我建议直接使用“Karrie”的文件夹ID。

    【讨论】:

    • 是的,您了解我的问题,因此按照您的建议对我的脚本进行了更改,但文件夹仍然没有从根目录移动到子文件夹。
    • @Robert Johnson 感谢您的回复。在我的环境中,修改后的脚本有效。那我能问问你的情况吗?是不是发生了什么错误?您是否在 Google 云端硬盘上运行了脚本?
    • 完全没有错误,这让我感到困惑。 karrie 文件夹确实出现在根目录中,但没有出现在应该移动到的子文件夹中。
    • @Robert Johnson 我添加了一个示例脚本。运行函数时,Logger.log(r)的ID是否显示“Karrie”的folderId?
    • 不,我使用调试器运行了脚本,但没有返回任何内容
    【解决方案2】:

    截至 2020 年,我发现移动文件的更简单方法是使用此功能:

    function moveToFolder(file, sourceFolder, destFolder) {
       var file = DriveApp.getFileById(file.getId());
       destFolder.addFile(file);
       sourceFolder.removeFile(file);
    }
    

    由于第一行,您可以将您的Spreadsheet、Google FormDocument 或其他 Google 对象转换为 File

    那么我们就使用Folder类的方法:https://developers.google.com/apps-script/reference/drive/folder

    注意事项:

    • 如果您使用 .create() 创建文件,您的 sourceFolder 将是 DriveApp.getRootFolder()

    • 如果您要移动多个文件,只需遍历它们即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多