一
我有个习惯,每个季度末会把电脑里那些散落的文件归拢一遍。这活儿说重不重,说轻也不轻——要从下载文件夹里筛出这三个月所有的发票扫描件,重命名成“日期-金额-事由”的格式,再挪到归档目录里去。以前我都是手动一张张处理,点开、查看、重命名、移动,来回倒腾。后来我琢磨,这种事该交给机器做。
于是我开始翻找能让电脑自己动起来的法子。
市面上的东西不少,可要么太笨重,装上之后我那台用了五六年的老机器风扇就没停过;要么看着简单,真上手才发现,你想让浏览器和本地文件夹配合着干活,就得写一堆代码去适配不同软件之间的沟沟坎坎。我试过好几款,最后留下的是一款 ,界面干净得像一张白纸,左边列着一排动作块:打开网页、等待元素、填入文本、模拟点击、读取文件夹、循环执行……全是拖拽式操作,把方块连起来就成了一条流程。这大概就是所谓的可视化编程,但比我预想的还要直白。
我很快搭了个简单的流程:让工具监视下载文件夹,一旦有新文件进来,就读取文件名,如果是PDF且包含“发票”二字,就调用一个重命名动作。这中间不需要写一行代码,纯粹是零代码自动化。跑起来之后,我坐在旁边看着它一张一张处理,心里竟生出一点惭愧——以前为这点事耗了多少时间。
二
可没过多久,我遇到了麻烦。那些发票扫描件的文件名乱七八糟,有的叫“微信图片_202503”,有的干脆是“IMG_001”。我想让重命名规则更智能一点——比如能从文件内容里读出金额和日期,再自动拼成规范的名字。纯靠工具自带的那些动作块,这事儿办不到。
这时候我注意到,在动作块的列表最底下,藏着一个小方块,上面写着“执行代码段”。点开之后,弹出一个极简的编辑器,里头写着几行注释,告诉你这个节点可以嵌入自定义的Python逻辑。
我愣了一下。一个主打零代码配置的工具,居然在底层留了一道门,让愿意的人可以往里塞代码。我慢慢敲了起来。
我需要从PDF里提取金额和日期。这活儿在Python里不算难,用pypdf或者pdfplumber都能办。但工具的环境里没有预装这些库,我也不想折腾依赖。转念一想,我平时最常用的数据处理库是pandas和openpyxl,要是能用它们来解析一些简单文本规则就好了。于是我把思路换了一下——既然文件名里偶尔会包含金额(比如“报销500元”),那我就写一段Python,让它去文件名里匹配数字,如果匹配到,就按规则生成新名字。
import re
def smart_rename(old_name):
# 从文件名中尝试提取金额
match = re.search(r'(\d+(?:\.\d+)?)元', old_name)
if match:
amount = match.group(1)
# 用今天的日期和金额组成新名字
from datetime import date
today = date.today().strftime("%Y%m%d")
new_name = f"{today}_{amount}元_报销单.pdf"
return new_name
return old_name # 没匹配到就保持原名
# 这个节点会收到上一个动作传过来的文件名
file_path = context.get_variable("new_file_path")
file_name = os.path.basename(file_path)
new_name = smart_rename(file_name)
# 把新名字交给下一个动作
context.set_variable("renamed_name", new_name)
就这么几行。没有复杂的爬虫,没有驱动配置,纯粹是用正则和日期做了一个简单的命名逻辑。我把这段代码塞进那个“执行代码段”的节点里,连在“检测到新文件”的动作后面。整个流程变成:文件进来 → 用Python分析文件名 → 生成新名字 → 执行重命名动作。工具负责监视、调用、传递数据,我只需要在最需要判断力的那一步动动脑子。
这让我想起早年学编程时老师说过的一句话:好工具不是把你绑在它的逻辑里,而是允许你在它构建的轨道上,自由地铺一段你自己最擅长的铁轨。
三
后来我慢慢把这条流程扩展开来。不光是发票,一些邮件附件也能用同样的方式处理。我把浏览器自动登录和邮件发送也接进来,变成一条多应用协同的链条:每天早上,工具先打开公司内网,用浏览器自动化下载前一天的销售报表,存到本地;然后用桌面自动化打开Excel,把数据粘贴到统计模板里;最后再用那段Python代码判断一下关键指标是否达标,决定邮件正文怎么写。
整个过程一气呵成。我那台老电脑跑起来依然安静,因为它本就是轻量级自动化,不像以前用过的那些商用软件那样动不动占掉一半内存。这大概就是低资源占用的好处——你不需要为了自动化而升级硬件,只要流程设计得聪明,老机器照样能跑得顺溜。
有一次跟朋友聊起这事,他问我:“你不觉得这样把代码嵌进去,反而比纯拖拽更麻烦吗?”
我说不是。恰恰是因为工具把最枯燥的流程自动化部分——等待、点击、窗口切换、数据传递——都封装成了可视化的动作块,我才能把精力集中在真正需要逻辑判断的那几个节点上。以前我写一个完整的自动化脚本,得花半天时间去调试浏览器等待超时、去处理不同窗口的句柄切换。现在这些脏活累活,工具全替我干了,我只用在最关键的地方写那几行Python,像是给一条流水线安上了一个智能传感器。
四
昨天我又改了一下那个命名逻辑。新来的报销单文件名里偶尔会带“美元”字样,我就让Python多识别一种货币单位。改完代码,保存,整个流程立刻用上了新逻辑。不用重启,不用重新部署,它就在后台安安静静地运行着。
窗外是城市永远停不下来的嘈杂,我的电脑也在忙——但忙的是它的事,不是我的事。我坐在桌前,端起一杯已经凉了的茶,看着屏幕上一行行执行日志安静地刷过去。那些曾经让我烦躁的、重复的、毫无创造力的点击和重命名,现在都变成了黑色背景上匀速滚动的白色字符,像雨点打在河面上,一圈一圈散开,然后消失。
我忽然觉得,一个好的自动化工具,就应该像一把称手的刀。它不必总在你眼前晃,但你知道它就在那里,在你需要的时候,替你劈开那些挡路的枝枝蔓蔓。而当你想要在刀刃上刻下自己名字的时候,它也不会拒绝——反而会在最深处留出一块平整的地方,让你亲手写上几行代码,作为只属于你的记号。
那个记号,在协同自动化工具里,就藏在那个不起眼的“执行代码段”方块中。