如何通过列表批量生成新的笔记?

我把一本书的目录复制到一个md文件中,将其拆分成有层级的无序列表,然后以每一个列表作为笔记文件记录读书笔记。但每一个列表单独选中并生成link太麻烦了。有没有方法,可以一下子以每个无序列表为标题批量生成笔记?谢谢!

可以使用 Dataview 编写js代码实现。

const fs = require('fs');
const path = require('path');
const li = ["a","b"]; // 填入你需要的笔记名称或使用下面的代码。
// const li = dv.current().file.lists.map(item=>item.text);

for (let i in li) {
    let filePath = path.join(app.vault.adapter.basePath,`${li[i]}.md`);
    fs.writeFileSync(filePath, "", 'utf8');
}

这段代码有一定危险性,因为一旦编辑结束就会自动执行。

等明天我有时间再写一个通过按钮启动的版本。

小白不会用,麻烦你了,非常感谢!

那为什么不直接在控制台输入代码呢,在控制台就十分可控了,ctrl shift i 就能打开了

如果用控制台,Dataview 的全局 API 没有 DataviewAPI.current(),可能得改成 DataviewAPI.page(app.workspace.getActiveFile().basename),见 DataviewJS 小白手册 - 开发控制台 - 步骤

下面的代码可以扫描所在笔记中的所有列表元素。然后显示预览,你可以点击单独的笔记链接创建笔记,也可以点击按钮全部创建。

const fs = require('fs');
const path = require('path');
const viewBox = dv.el("div","根据当前笔记中的列表批量创建笔记",{cls:"card"});
const fileView = document.createElement("div");
const button = document.createElement("button");
const li = dv.current().file.lists.map(item=>item.text).values;

button.textContent = "创建文件";
viewBox.appendChild(fileView);
viewBox.appendChild(button);


(function() {
    for (let i in li) {
        if (li[i]) {
            fileView.appendChild(
                dv.span(`[[${li[i]}]] `)
            );
        }
    }
})();


button.onclick = function(){
    for (let i in li) {
        let filePath = path.join(app.vault.adapter.basePath,`${li[i]}.md`);
        if (!fs.existsSync(filePath)) {
            fs.writeFileSync(filePath, "", 'utf8');
        }
    }
}

感谢,辛苦大佬了!仔细学习一下

如果只是列表文本变成链接,可以用dataviewjs读取当前文件列表,替换列表文本 t=> [t],要使用的的时候点击链接创建。 :thinking:
替换完后写入文件可以通过按钮点击事件然后api直接替换当前文件内容或者通过dv.paragraph(“\`\`\`\ntext”)输出为代码,然后点击代码框自带的复制按钮,手动粘贴到当前文件什么的。