如何找到当前脚本文件所在文件夹的路径?

时间:2013-02-08 10:40:03

标签: google-apps-script

如何找到当前文件夹的路径?我只是希望能够获取文件夹的路径,以便我可以操作文件夹中的文件而无需在脚本中键入路径。

5 个答案:

答案 0 :(得分:6)

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

thisFileId = SpreadsheetApp.getActive().getId();
var thisFile = DriveApp.getFileById(thisFileId);
var parentFolder = thisFile.getParents()[0].getName();

答案 1 :(得分:4)

在脚本中添加这样的函数

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

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

获得此脚本的文件后,您可以调用getParents()等。

答案 2 :(得分: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");
}

enter image description here

(ID被故意截断)

注意这个脚本工作得很好但是如果“随机字符串”被修改就奇怪地停止工作...我想驱动器中的搜索引擎不喜欢这个改变但是我有没有严肃的解释(评论欢迎),但几分钟后它再次起作用; - )

答案 3 :(得分: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

答案 4 :(得分: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()获取其名称。