5

如何找到当前文件夹的路径?我只想能够获取文件夹的路径,这样我就可以在不将路径输入脚本的情况下操作文件夹中的文件。

4

6 回答 6

10

对于电子表格,我发现这是可行的:

thisFileId = SpreadsheetApp.getActive().getId();
var thisFile = DriveApp.getFileById(thisFileId);
var parentFolder = thisFile.getParents()[0].getName();
于 2013-05-18T16:22:55.243 回答
4

将这样的函数添加到您的脚本中

function getThisScriptInDrive() {
  return DriveApp.find("some unique string that wont be anywhere else")[0];
}

这将搜索 Drive 并找到该脚本本身,因为它包含该字符串 - 就在函数调用中!- 无需在其他任何地方声明。只要您使用足够晦涩的字符串-我建议您在键盘上混合几百个字符-它在驱动器中将是唯一的,因此可以正常工作。

一旦你有了这个脚本的文件,你就可以调用 getParents() 等。

于 2013-02-08T18:05:02.910 回答
4

感谢Corey的回答和Thomas的回答,这是一个“全功能”版本,它显示了记录器中的文件夹树以及每个父母的 id ......只是为了好玩 ;-)

function getScriptFolderTree() {
  var thisScript = getThisScriptInDrive();
  var names = []
  var Ids = []
  var folder = thisScript.getParents()[0];
  while (folder.getName() != "Root"){
      names.unshift(folder.getName());
      Ids.unshift(folder.getId());
    var parents = folder.getParents();
       var folder = parents[0];
  }
Logger.log('Root/'+names.join().replace(/,/g,'/'))  
Ids.unshift(DriveApp.getRootFolder().getId())
Logger.log(Ids)  
}


function getThisScriptInDrive() {
  return DriveApp.getFileById("poiuytrezazertyujhgfdsdcvcxyydryfhchfh");
}

在此处输入图像描述

(ID 被故意截断)

请注意,此脚本运行良好,但如果修改了“随机字符串”,它会奇怪地停止工作......我想驱动器中的搜索引擎不喜欢这个更改,但我没有认真的解释(欢迎评论)但经过几分钟后它又可以工作了;-)

于 2013-02-08T23:34:04.173 回答
0

你可以这样做:

function myFunction() {
  var thisScript = getThisScriptInDrive();
  var folder = thisScript.getParents()[0];
  while (folder.getName() != "Root"){
    var parents = folder.getParents();
    for (var i in parents){
      var folder = parents[i];
      Logger.log(folder.getName());
    }
  }
}


function getThisScriptInDrive() {
  return DocsList.find("`<jj!?=(<DW+.W/m7SBF:sgu/@B(&Cs3:{ajA~ys@KmN4&]ujhpZ~z[Tv?+dk}MpK,8pY=w&dny8N'74:.9H:~uCgY=7pRt4[Tn5")[0];
}

这仅在文件夹只有 1 个父文件夹时才有效,因为它只需要 1 个路径。

编辑:感谢Corey G

于 2013-02-08T15:33:36.530 回答
0

我调整了 Serge 的代码来编写一个通用函数

function getThisFilePath() {
  //let thisFile = DriveApp.getFileById(DocumentApp.getActiveDocument().getId());  // for a Doc
  let thisFile = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()); // for a Sheet
  let path = {name: '', folder: []};
  let folder = thisFile.getParents().hasNext() ? thisFile.getParents().next() : undefined;
  while (folder) {
    path.folder.unshift({name: folder.getName(), id: folder.getId()});
    folder = folder.getParents().hasNext() ? folder.getParents().next() : undefined; 
  }
  path.folder.forEach(folder => path.name += '/' + folder.name);
  Logger.log(path.name);
  return path;
}

记录输出

上午 11:02:57 信息/我的驱动器/技术/开发/2022

于 2021-12-15T19:35:47.807 回答
0

我能够获得包含正在运行的脚本的文件夹:

//
// PrintScriptFolder -- print the name of the folder in which the running script resides.
//
function PrintScriptFolder()
{
  var scriptId = ScriptApp.getScriptId();
  console.info('scriptId = ' + scriptId);
  
  var file = DriveApp.getFileById(scriptId);
  var folders = file.getParents();
  if (folders.hasNext())
  {
    var folder = folders.next();
    var name = folder.getName();
    console.info('script folder name = ' + name);    
  }  
}

诀窍是使用 ScriptApp 来获取正在运行的脚本的 ID。从那里开始非常简单:使用 DriveApp 获取文件 ID,使用 getParents() 获取(一个)父文件夹的列表,使用 next() 获取它,并使用 getName() 获取其名称。

于 2020-07-27T22:16:24.923 回答