大家好,我是前端西瓜哥。最近我有個(gè)個(gè)人需求,要寫個(gè)小腳本。
我有一個(gè)基于 hexo 生成的個(gè)人靜態(tài)博客網(wǎng)站,想要給博客的所有的篇文章的尾部加一段廣告文案,我不想寫這種沒啥意思的腳本,就找 ChatGPT 幫我寫一段小腳本。
初版
因?yàn)槲沂乔岸碎_發(fā),所以我選擇讓 ChatGPT 給我生成 nodejs 腳本。其他 sh、Python/ target=_blank class=infotextkey>Python 其實(shí)也可以,但我真不熟,不好確認(rèn)代碼是否符合需求。
描述很簡潔,ChatGPT 給的結(jié)果看著不錯(cuò)。
加上細(xì)節(jié)要求
但我接著發(fā)現(xiàn)我有個(gè)細(xì)節(jié)沒有提供,就是文件路徑需要在文件里提供。我期待通過命令行參數(shù)傳入路徑,因?yàn)樵?bash 環(huán)境下,可以通過 tab 鍵來補(bǔ)全路徑,既方便又不容易出錯(cuò)。
得益于 ChatGPT 的上下文聯(lián)想能力,我們可以基于上面的問題,加入新的要求。
還提供了使用案例:
完整代碼
const fs = require('fs');
const path = require('path');
// 從命令行參數(shù)中獲取文件夾路徑
const directoryPath = process.argv[2];
if (!directoryPath) {
console.error('請(qǐng)?zhí)峁┮幚淼奈募A路徑');
process.exit(1);
}
const suffix = 'nn這是添加的字符串。'; // 將要添加的字符串放在這里
fs.readdir(directoryPath, (err, files) => {
if (err) {
console.error(`無法讀取目錄:${directoryPath}`, err);
return;
}
// 僅處理 Markdown 文件
const markdownFiles = files.filter(file => path.extname(file).toLowerCase() === '.md');
markdownFiles.forEach(file => {
const filePath = path.join(directoryPath, file);
// 讀取文件內(nèi)容
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(`無法讀取文件:${filePath}`, err);
return;
}
// 將字符串添加到文件末尾
const content = `${data.trim()}${suffix}`;
// 將更改保存回原始文件
fs.writeFile(filePath, content, 'utf8', err => {
if (err) {
console.error(`無法寫入文件:${filePath}`, err);
return;
}
console.log(`已更新文件:${filePath}`);
});
});
});
});
使用
將代碼拷貝到我創(chuàng)建的 js 文件下,將里面的 suffix 替換為自己需要填充的內(nèi)容。
然后執(zhí)行:
node scripts/add-footer-qrcode.js source/_posts
可以看到,文件夾下的 100 多個(gè) md 文件的末尾都加上了這段文字。
結(jié)尾
我是前端西瓜哥,歡迎關(guān)注我,一起感受 AI 的日新月異的變化。
ChatGPT 用來寫簡單的腳本或算法,那叫一個(gè)牛逼。
你要是讓我來寫,還是挺花時(shí)間的,里面小細(xì)節(jié)挺多,快的話寫加測(cè)試也得半小時(shí),但 ChatGPT 它來了,它 10s 就給你寫好了,我們復(fù)制一下,改改就能用,甚至不用改!