如何找到当前文件夹的路径?我只想能够获取文件夹的路径,这样我就可以在不将路径输入脚本的情况下操作文件夹中的文件。
6 回答
对于电子表格,我发现这是可行的:
thisFileId = SpreadsheetApp.getActive().getId();
var thisFile = DriveApp.getFileById(thisFileId);
var parentFolder = thisFile.getParents()[0].getName();
将这样的函数添加到您的脚本中
function getThisScriptInDrive() {
return DriveApp.find("some unique string that wont be anywhere else")[0];
}
这将搜索 Drive 并找到该脚本本身,因为它包含该字符串 - 就在函数调用中!- 无需在其他任何地方声明。只要您使用足够晦涩的字符串-我建议您在键盘上混合几百个字符-它在驱动器中将是唯一的,因此可以正常工作。
一旦你有了这个脚本的文件,你就可以调用 getParents() 等。
感谢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 被故意截断)
请注意,此脚本运行良好,但如果修改了“随机字符串”,它会奇怪地停止工作......我想驱动器中的搜索引擎不喜欢这个更改,但我没有认真的解释(欢迎评论)但经过几分钟后它又可以工作了;-)
你可以这样做:
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
我调整了 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
我能够获得包含正在运行的脚本的文件夹:
//
// 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() 获取其名称。