关于dataviewjs代码的改进(如何限定文件夹输出带特定标签的文件链接和对应行

知乎链接:Obsidian 插件之 Dataview - 知乎
原来的代码是搜索所有的文件,求问怎么限定只获取特定文件夹的markdown文件呀!

输出所有带有标签的文件链接以及对应行且形成表格
​```dataviewjs
// 获取 Obsidian 中的所有 Markdown 文件
const files = app.vault.getMarkdownFiles()

// 将带有标签的文件以及行筛选出来
let arr = files.map(async(file) => {
const content = await app.vault.cachedRead(file)
//turn all the content into an array
let lines = await content.split("\n").filter(line => line.includes("#tag"))
return ["[["+file.name.split(".")[0]+"]]", lines]
})

// 生成表格,如果要将当前的文件排除的话,请修改其中的排除文件
Promise.all(arr).then(values => {
console.log(values)
//filter out files without “Happy” and the note with the dataview script
const exists = values.filter(value => value[1][0] && value[0] != “[[排除文件]]”)
dv.table([“file”, “lines”], exists)
})
​```

把代码里的

const files = app.vault.getMarkdownFiles()

改为

let folderpath="文件夹名称"
const files = app.vault.getMarkdownFiles().filter(file=>file.path.includes(folderpath))
1 个赞

:laughing:问题解决了,太感谢啦!

这段代码还有2个需求请教一下大佬:

1.排序:现在是乱序的,希望能把文件排序,文件名是
2022-03-01
2022-03-02
这样的日记文件。

2.每个文件没有明显的分割界限,混在一起不好查看。

这句代码后面加上.sort()即可

const exists = values.filter(value => value[1][0] && value[0] != "[[排除文件]]").sort()  

麻烦问一下,如果想让sort倒序排列,需要在sort()的括号中怎么填写哪?

再在后面加上 .reverse() 应该可以,这是反转数组的函数

确实管用!我试了在SORT的括号里边填写条件,发现总有其中几个是乱序的,困扰两三天了,感谢!

请教下 如果是想在两个文件夹里做标签汇总需要怎么改呢
或者这个排除文件语句有办法排除多个文档吗“const exists = values.filter(value => value[1][0] && value[0] != “[[排除文件]]”)”

怎么限定搜索的时间范围呢?

我的文件在YAML区设置了文本格式的文件生成时间,如“2023-10-06 17:21”,在搜索页面设置了时间范围,如“Startdate:: 2023-09-01”和“Enddate:: 2023-09-30”。将这段代码的第一句修改成 const files = app.vault.getMarkdownFiles().filter(f => (f.creationtime >= dv.current().Startdate) && (f.creationtime <= dv.current().Enddate)),可以运行、但是搜索结果为0。

应该怎么修改呢?