How do I locate the path of the folder in which th

2019-01-29 05:44发布

How do I locate the path of the current folder? I just want to be able to get the path of the folder so that I can manipulate the files in the folder without typing the path into the scripts.

4条回答
聊天终结者
2楼-- · 2019-01-29 06:22

You could do this:

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];
}

This only works good if the folder has only 1 parent because it only takes 1 path.

edit: Thanks to Corey G

查看更多
Evening l夕情丶
3楼-- · 2019-01-29 06:27

Add a function like this to your script

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

This will search Drive and find this script itself because it contains that string - right there in the function call! - no need to declare it anywhere else. As long as you use an obscure enough string - i'd recommend mashing a few hundred chars on your keyboard - it will be unique across drive and therefore just work.

Once you have a File for this script, you can call getParents() etc.

查看更多
走好不送
4楼-- · 2019-01-29 06:39

For a Spreadsheet I found this to work:

thisFileId = SpreadsheetApp.getActive().getId();
var thisFile = DriveApp.getFileById(thisFileId);
var parentFolder = thisFile.getParents()[0].getName();
查看更多
仙女界的扛把子
5楼-- · 2019-01-29 06:45

Thanks to Corey's answer and to Thomas'one, here is a "full featured" version that shows the folder tree in the logger and every parents id as well... just for fun ;-)

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's are truncated intentionally)

Note that this script is working nicely but it strangely stops working if the 'random string' is modified... I imagine that the search engine in drive doesn't like the change but I have no serious explanation (comments welcome) but after a few minutes it works again ;-)

查看更多
登录 后发表回答