Google apps script 如何定位当前脚本文件所在文件夹的路径?

Google apps script 如何定位当前脚本文件所在文件夹的路径?,google-apps-script,Google Apps Script,如何定位当前文件夹的路径?我只想能够得到文件夹的路径,这样我就可以在不在脚本中键入路径的情况下操作文件夹中的文件 您可以这样做: function myFunction() { var thisScript = getThisScriptInDrive(); var folder = thisScript.getParents()[0]; while (folder.getName() != "Root"){ var parents = folder.getParents()

如何定位当前文件夹的路径?我只想能够得到文件夹的路径,这样我就可以在不在脚本中键入路径的情况下操作文件夹中的文件

您可以这样做:

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];
}
函数myFunction(){
var thisScript=getThisScriptInDrive();
var folder=thisScript.getParents()[0];
while(folder.getName()!=“Root”){
var parents=folder.getParents();
for(父母中的var i){
var folder=parents[i];
Logger.log(folder.getName());
}
}
}
函数getThisScriptInDrive(){

return DocsList.find(“`将这样的函数添加到脚本中

function getThisScriptInDrive() {
  return DriveApp.find("some unique string that wont be anywhere else")[0];
}
这将搜索驱动器并找到此脚本本身,因为它包含该字符串-就在函数调用中!-无需在其他任何地方声明它。只要使用足够模糊的字符串-我建议在键盘上混合几百个字符-它在整个驱动器中都是唯一的,因此可以正常工作

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

多亏了’s answer和’one,这里有一个“全功能”版本,它显示了记录器中的文件夹树以及每个家长id……只是为了好玩;-)

(故意截断ID)


请注意此脚本运行良好,但如果“随机字符串”被修改,它会奇怪地停止工作……我想,drive中的搜索引擎不喜欢此更改,但我没有认真的解释(欢迎评论),但几分钟后它再次工作;-)

对于一个电子表格,我发现它可以工作:

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

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

//
// 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()获取获取其名称。

您是否有独立脚本或嵌入在电子表格中的内容?非常感谢您的回复。如何获取脚本文件所在文件夹的文件夹ID?如果您有独立脚本,则无法通过脚本支付费用。谢谢Serge。您为我节省了一些时间。延迟可能是由于所有错误造成的dexing.嗨,Michael,关于索引,你是对的……奇怪的是,今天它几乎是瞬间的;-)-也就是说,脚本还不是完美的,有些“特殊情况”是一个文件同时位于两个文件夹中(你不能用Drive web UI创建,但用GAS是可行的)没有正确处理…无论如何,我不关心这个特殊情况,因为我不喜欢这种奇怪的安排^^^嗨,Serge,有可能使一个文件夹成为其他两个文件夹的子文件夹。请参阅:所以这个脚本远不是完美的。感谢链接,我不知道“命令单击”选项…即使我很确定我会这样做’t ever use:-)-也就是说,请随意推荐一个更好的版本,处理所有可能的组合,我很乐意投票。什么随机字符串?Pouytrezazertyujhgfdsdcvcxyydryfhcgh是随机字符串还是脚本的id或绑定到脚本的电子表格或绑定到电子表格的表单id?或者文档使用:thisFileId=DocumentApp.getActiveDocument().getId();取而代之。@savedario如果有某种方法可以激活它,无论它是什么类型的…scriptId=1xe2mbAXd1M8djvRFS_xlN8hG8g1B4C3UuRVxEa4vTQ7dQMe3NlxlYUIC 2021年2月5日上午11:34:13错误异常:找不到具有给定ID的项目。可能是因为您没有编辑此项目或您没有访问它的权限。只有您自己从我的脚本运行的r函数!?!?
//
// 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);    
  }  
}