乐于分享
好东西不私藏

AI帮你读PDF、写Excel、重命名文件?学会文件Skill,全自动搞定

AI帮你读PDF、写Excel、重命名文件?学会文件Skill,全自动搞定

AI 很会“说”,但让它碰一下你电脑上的文件——PDF、Excel、Word——它就傻眼了。

就像你招了一个特别聪明的助理,语数外样样精通,但你让他"把桌面上的合同打印出来",他说"我不会用打印机"。

今天这一课,给 AI 装上「操作文件」的能力——读 PDF、写 Excel、批量重命名。学完你会发现,那些每周要花你半小时的"文件杂活",AI 几秒钟就能干完。


一、文件处理 Skill 能干什么

文件处理 Skill,简单说就是——让代码帮你在电脑上操作文件。

操作
以前你手动干
有了文件 Skill
读一份 PDF
打开 → 滚动 → 找关键信息
AI:自动提取文字,直接给摘要
写一个 Excel
新建 → 填表头 → 填数据 → 调格式
AI:你说需求,它自动生成
批量改名
一个个右键 → 重命名 → 改到手酸
AI:一句话,100 个文件瞬间改完
读一个 Word
打开 → 从头看到尾
AI:自动提取内容,告诉你重点

说白了,就是把你在电脑上"点点点"的操作,变成代码自动执行。


二、实战一:写一个「PDF 转文字」Skill

很多合同、报告、论文都是 PDF 格式。每次想找一段关键信息,得打开翻半天。

这个 Skill 的功能:你告诉它 PDF 文件在哪,它帮你把里面的文字全部提取出来。

第 1 步:创建文件夹

skills/
└── pdf_reader/

第 2 步:SKILL.md

# PDF 阅读器

## 功能
读取指定 PDF 文件,提取其中的全部文字内容。

## 使用场景
用户让 AI 读合同内容
用户让 AI 总结 PDF 论文
用户让 AI 从 PDF 报表中提取数据

## 输入参数
path(必填):PDF 文件的完整路径

## 输出格式
返回 PDF 中的全部文字内容。

第 3 步:skill.json

{
"name""pdf_reader",
"version""1.0.0",
"description""读取PDF文件并提取文字",
"author""我",
"keywords": ["PDF""阅读""提取文字"],
"permissions": ["filesystem"]
}

注意 ——操作文件必须有这个权限。"permissions": ["filesystem"]

第 4 步:index.js

' PDF 阅读器 Skill
'
 需要先安装 pdf-parse 包:npm install pdf-parse
import fs from'fs'' fs 是文件系统模块,能读写电脑上的文件
import pdf from '
pdf-parse'  ' pdf-parse 是专门解析 PDF 的库

exportdefaultasyncfunction(query{
try {
' ===== 1. 取参数 =====
        const filePath = query.path
        if (!filePath) {
            return '
⚠️ 请提供 PDF 文件的路径。例如:读 PDF C:/合同.pdf'
        }

        ' ===== 2. 检查文件是否存在 =====
        if (!fs.existsSync(filePath)) {
            return `⚠️ 文件不存在:${filePath}。请检查路径是否正确。`
        }

        ' ===== 3. 读取 PDF =====
        ' fs.readFileSync 就是"读取这个文件的内容"
        const fileBuffer = fs.readFileSync(filePath)
        ' pdf() 把读取到的内容解析成文字
        const data = await pdf(fileBuffer)

        ' ===== 4. 返回提取的文字 =====
        const text = data.text   ' data.text 就是 PDF 里的全部文字

        ' 如果文字太长,只返回前 2000 字 + 提示
        if (text.length > 2000) {
            return text.slice(0, 2000) +
                   `\n\n……(共 ${text.length} 字,以上为前 2000 字)`
        }
        return text

    } catch (error) {
        return `⚠️ PDF 读取失败:${error.message}`
    }
}

核心就两步:fs.readFileSync 读文件,pdf() 解析文字。其他代码都是在做"安全检查"和"格式处理"。


三、实战二:写一个「生成 Excel」Skill

需求:「帮我把这些销售数据生成一个 Excel 表格,第一列是月份,第二列是销售额。」

文件结构

skills/
└── excel_writer/
    ├── SKILL.md
    ├── skill.json
    └── index.js

index.js

' Excel 写入器 Skill
'
 需要先安装 xlsx 包:npm install xlsx
import XLSX from'xlsx'

exportdefaultasyncfunction(query{
try {
' ===== 1. 取参数 =====
        const filePath = query.path || '
./output.xlsx'  ' 默认保存在当前目录
const headers = query.headers || []              ' 表头:[月份, 销售额]
        const rows = query.rows || []                    '
 数据:[[1月,100],[2月,200]]
const sheetName = query.sheetName || 'Sheet1'' 工作表名

        if (rows.length === 0) {
            return '
⚠️ 请提供要写入的数据。例如:生成表格,数据为[["1月",100],["2月",200]]'
        }

        '
 ===== 2. 组装数据 =====
' 把表头和数据拼成一个大数组
        const allData = [headers, ...rows]  '
 ...rows 就是"把 rows 展开"

' ===== 3. 创建工作表和工作簿 =====
        '
 XLSX.utils.aoa_to_sheet 把二维数组转成 Sheet
const worksheet = XLSX.utils.aoa_to_sheet(allData)
const workbook = XLSX.utils.book_new()
        XLSX.utils.book_append_sheet(workbook, worksheet, sheetName)

' ===== 4. 写入文件 =====
        XLSX.writeFile(workbook, filePath)

        return `✅ Excel 已生成:${filePath}。` +
               `共 ${rows.length} 行数据,${headers.length} 列。`

    } catch (error) {
        return `⚠️ Excel 生成失败:${error.message}`
    }
}

当你对 Agent 说「帮我把这些数据生成一个 Excel」,Agent 会自动提取参数—把表头填进 headers,把数据填进 rows—然后调用这个 Skill。


四、实战三:写一个「批量重命名」Skill

需求:把  文件夹下所有 PNG 文件的文件名前面加上  前缀。images/photo_

重命名前:a.png, b.png, c.png
重命名后:photo_a.png, photo_b.png, photo_c.png

index.js

' 批量重命名 Skill
import fs from '
fs'
import path from '
path'     ' path 模块用来处理文件路径

exportdefaultasyncfunction(query{
try {
' ===== 1. 取参数 =====
        const folder = query.folder           '
 要处理的文件夹
const prefix = query.prefix || ''' 要加的前缀
        const suffix = query.suffix || '
'     ' 要加的后缀
const extension = query.extension || '.png'' 要处理的文件类型

        if (!folder) {
            return '
⚠️ 请提供文件夹路径。例如:重命名 C:/images 下的文件'
        }

        ' ===== 2. 检查文件夹 =====
        if (!fs.existsSync(folder)) {
            return `⚠️ 文件夹不存在:${folder}`
        }

        ' ===== 3. 读取文件夹,筛选目标文件 =====
        const files = fs.readdirSync(folder)
                         .filter(f => f.endsWith(extension))  ' 只保留 .png 文件

        if (files.length === 0) {
            return `⚠️ 在 ${folder} 中没有找到 ${extension} 文件`
        }

        ' ===== 4. 逐个重命名 =====
        let count = 0
        for (const oldName of files) {
            const oldPath = path.join(folder, oldName)        ' 旧路径
            const newName = prefix + oldName + suffix          ' 新文件名
            const newPath = path.join(folder, newName)        ' 新路径

            fs.renameSync(oldPath, newPath)                    ' 执行重命名
            count++
        }

        return `✅ 重命名完成!共处理 ${count} 个 ${extension} 文件。`

    } catch (error) {
        return `⚠️ 重命名失败:${error.message}`
    }
}

100 个文件,手动改要 5 分钟,Skill 跑完只要 1 秒。这就是自动化的力量。


五、文件处理的三个安全守则

文件操作比你想象的危险——删错了文件没有回收站。

守则 1:操作前先检查文件是否存在。

if (!fs.existsSync(filePath)) {
return`⚠️ 文件不存在:${filePath}`
}

就像拿快递前先确认门牌号——地址错了,拿到的不是你的东西。

守则 2:写文件前先备份(重要文件)。

' 如果目标文件已存在,先备份
if (fs.existsSync(filePath)) {
    const backupPath = filePath + '
.backup'
    fs.copyFileSync(filePath, backupPath)
}

守则 3:在 SKILL.md 里明确声明这个 Skill 会操作哪些文件。

## 注意事项
此 Skill 会读取并修改指定文件夹内的文件
建议在操作前备份重要文件
不会删除任何文件(仅重命名/读取/写入)

动手:选一个你最需要的文件 Skill 来实现

  • 最常用:PDF 阅读器(上面的代码直接复制就能跑)
  • 最省时间: 批量重命名(整理文件夹的神器)
  • 最高频:Excel 生成器(周报月报自动生成)

三个里面选一个,跟着上面的代码敲一遍。文件 Skill 的套路都一样:检查文件 → 读取/写入 → 返回结果。搞懂一个,剩下两个你一看就懂。


文件 技能 = AI 的「双手」

之前 AI 只有嘴,现在它有手了。能拿起你桌面的文件,能帮你填表,能帮你整理文件夹。

从今天开始,那些"重复操作文件"的琐事——你动嘴,AI 动手。

下一课,我们写一个数据处理 Skill——让 AI 帮你自动做报表、画图表。每周五的月报噩梦,从下周起彻底拜拜。

实现哪一个了?评论区告诉我,帮你 debug~ 📁