我学编程的方式和大多数人不太一样——我不是从”学一门语言”开始的,而是从”解决一个问题”开始的。
最早写脚本是因为一个很蠢的场景:我需要把一批图片的文件名从 IMG_001.JPG 改成 2026-07-15-北京-001.jpg。用鼠标一个个重命名,20 张图就烦了。上网搜了一下,发现一个叫 ren 的命令(Windows)能批量改名。但那语法太绕了,后来换成 PowerShell 一行搞定。
那以后,每次遇到重复劳动,我的第一反应不再是”忍一下手动做”,而是”能不能写个脚本”。
这个方法比任何编程课都有效。不是因为脚本多厉害,而是因为有真实的问题等你解决,你不会学到一半就放弃。
从最无聊的事开始
如果你没写过脚本,最简单的入门方式不是买书,而是找一个你每周至少做一次、每次超过 5 分钟的重复操作。
我说几个我身边真实的例子:
批量重命名文件。 相机导出的照片叫 DSC0001.ARW,毫无意义。改成 2026-07-20-颐和园-01.arw,一眼就知道是什么。用 PowerShell 写个脚本,参数化日期和地点,每次拍完照跑一遍。
批量压缩图片。 这个博客用的 WebP 转换脚本 就是这么来的。手动一张张转太慢,写个脚本遍历目录,自动转,顺便把原图移到备份目录。
整理下载文件夹。 我下载文件夹常年几百个文件,1 写了个脚本按文件类型分类归档——.pdf 去 文档/,.zip 去 压缩包/,.exe 去 安装包/,按修改日期再分一层。每个月跑一次,桌面再也没乱过。
这些事情单个看都很小,但累积起来,每周省 10 分钟,一年就是 8 个多小时。而且脚本不会忘、不会累、不会手滑删错文件。
不用学一门语言,够用就行
很多人觉得写脚本得先学会 Python 或 JavaScript,这不是事实。
你的操作系统自带了一个脚本环境:
- Windows:PowerShell(比 CMD 强太多了,对象管道、.NET 都能调)
- macOS/Linux:Bash/Zsh(系统自带,文本处理一绝)
这三个环境覆盖了 95% 的日常自动化需求。而且你不需要背语法,每次写的时候查就行:
我的日常搜索习惯
每次写脚本遇到不会的,我就搜:
- “powershell 批量重命名 正则”
- “bash 遍历目录 文件名替换”
- “powershell 压缩 zip 文件夹”
人脑不是文档,不需要记住所有 API。记住有这个东西就行了,具体语法搜索引擎解决。
等你觉得 PowerShell/Bash 不够用了——比如要处理 JSON API、爬网页、操作 Excel——再上 Python。而且那时候你学 Python 会快很多,因为你知道自己要解决什么问题,而不是对着语法书发呆。
我的”脚本进化史”
第一阶段是单行命令。没有文件,每次现写现用:
# 把当前目录所有 .png 转成 .webp(需要 ImageMagick)
Get-ChildItem *.png | ForEach-Object { magick convert $_.Name $_.BaseName + '.webp' }
第二阶段是保存成 .ps1 文件。因为发现同一个功能要反复写:
# resize-photos.ps1
param(
[string]$Path = ".",
[int]$Width = 1920
)
Get-ChildItem $Path -Include *.jpg, *.png -Recurse | ForEach-Object {
magick convert $_.FullName -resize $Width $_.FullName
Write-Host "已处理: $($_.Name)"
}
第三阶段是加参数和错误处理。因为脚本开始给别人用了(其实就是我自己三个月后回来用):
# backup-blog.ps1
$source = "D:\ruanjian\code\github_project\CloakBlog"
$backupDir = "D:\backups\blog"
$date = Get-Date -Format "yyyy-MM-dd"
# 检查源目录是否存在
if (-not (Test-Path $source)) {
Write-Error "源目录不存在: $source"
exit 1
}
# 创建备份目录
New-Item -ItemType Directory -Path "$backupDir\$date" -Force | Out-Null
# 排除 node_modules 之类的目录
$exclude = @('node_modules', '.git', 'dist')
Get-ChildItem $source -Exclude $exclude | Copy-Item -Destination "$backupDir\$date" -Recurse -Force
Write-Host "备份完成: $backupDir\$date"
这个「三阶段进化」不是计划出来的,是需求驱动的。刚开始觉得单行够用,后来发现重复写太烦,就保存成文件。再后来发现没有参数和错误提示,三个月后自己都看不懂——于是老老实实加了 help 注释。
一个完整的例子:博客图片优化脚本
拿这个博客的真实需求来说。每次写文章配图,流程是这样的:
- 把截图/照片丢进
public/img/ - 转换成 WebP 格式
- 压缩到合理大小(不压缩一张截图能 2MB,压缩后 200KB)
- 生成一个适合文章引用的路径列表
一开始我每次都手动执行 ImageMagick 命令,后来写了一个脚本:
# optimize-blog-images.ps1
param(
[string]$SourceDir = ".\public\img",
[int]$Quality = 80,
[int]$MaxWidth = 1920
)
$totalSaved = 0
$processed = 0
Get-ChildItem $SourceDir -Include *.png, *.jpg, *.jpeg | ForEach-Object {
$output = $_.DirectoryName + "\" + $_.BaseName + ".webp"
# 如果 WebP 已存在且更新,跳过
if ((Test-Path $output) -and ($_.LastWriteTime -lt (Get-Item $output).LastWriteTime)) {
return
}
$beforeSize = $_.Length
magick convert $_.FullName -resize $MaxWidth -quality $Quality $output
$afterSize = (Get-Item $output).Length
Write-Host "$($_.Name) → $($_.BaseName).webp (节省 $([math]::Round(($beforeSize - $afterSize) / 1KB)) KB)"
$totalSaved += $beforeSize - $afterSize
$processed++
}
Write-Host "`n处理完成: $processed 个文件,共节省 $([math]::Round($totalSaved / 1MB, 2)) MB"
这个脚本并不复杂——遍历文件、跳过已处理的、调用 ImageMagick 转换、输出统计。但它每次运行都在给我省时间。
你的第一个脚本也不需要复杂。写一个能帮你省 5 分钟的脚本,就算成功。
一些可以写的方向
如果你实在想不出脚本能干什么,这里列一些我写过或者认识的人写过的:
- 备份脚本:备份配置文件、博客、笔记到外置硬盘 / 网盘
- 截图整理:桌面的截图自动按年月归档
- 批量转码:视频/音频批量转格式(配饭的 FFmpeg 一绝)
- 日志清理:删除超过 N 天的临时文件和日志
- Git 辅助:一键创建 feature 分支、同步 fork、清理已合并分支
- 定时截图:每隔一小时截屏一次,回顾一天的时间花在哪了
核心原则 :从你已经在做的事情里找一个最烦的,把它自动化。1 小时之内搞不定的话,说明选的目标太大了,换个更小的。
不是每件事都值得自动化
写脚本也有成本。维护它、调试它、偶尔还要适配环境变化。有时候手动做一次十分钟,但写脚本要花两小时,而且一年只用两三次——这种就不值得自动化。
我有个判断标准:“三三法则”。
如果一件事满足以下两条,就值得写脚本:
- 三次原则:同一操作做了三次以上
- 三秒原则:手动操作需要三秒以上才能完成
- 三个月原则:这件事在未来三个月内还会再出现
满足两条就写脚本,满足一条就再想想,一条都不满足就手动做。
最有用的编程课是你自己的需求
我见过太多人学编程的方式是:找一门语言的入门教程,从变量、函数、对象一路啃到高阶用法,然后——就没有然后了。因为没有真实场景去用,学完就忘。
写脚本是反过来的:你有个具体问题,不懂语法?现查。不会设计?抄别人改。没用过正则?只在这次需要的时候学。每一个知识点都是因为要用才学的,学了立刻就产生价值。
这种正反馈是持续学习的核心动力。而且你积累的每一个脚本——不管多小——都是在给你的未来省时间。
这篇文章的初稿就是用 Vim 写的。我特意花过一点时间学 Vim 基础操作,倒不是因为它多酷,而是编辑 Markdown 文件时手不需要离开键盘,比鼠标切来切去快一点。就快这么一点,日积月累也多出不少时间。
到了现在,写脚本已经成了一种习惯。遇到重复劳动,大脑自动开始想”这个事情能不能自动化”。有时候花在自动化上的时间,比手动做完还多——但那又怎样呢?过程是开心的,每次优化出更好的方案也有成就感。
毕竟写脚本本身,就是一件让人上瘾的事。
Footnotes
-
真的去数过,最多的时候有 400 多个文件,其中一半早就不记得是什么了。 ↩
种下你的想法
在花园里留下一条评论,和这篇文章一起生长。