本文目录导读:

- 第一步:明确需求(不要追求完美)
- 第二步:选择语言和环境(建议从 Shell 或 Python 开始)
- 第三步:编写脚本(基于真实案例)
- 第四步:测试、优化与固化(成为日常工具)
- 如果遇到困难怎么办?(常见调试技巧)
- 最后的建议
编写你的第一个实用脚本,关键在于从解决一个真实的、微小的痛点开始,而不是去构建一个庞大的系统,下面是一个通用的、经过验证的“四步法”,可以帮你从零开始,快速写出生效的脚本。
第一步:明确需求(不要追求完美)
不要想:“我要写一个能自动备份所有文件、发送邮件、并具备图形界面的脚本。”
要想:“我每天都要手动把 C:\工作文档 复制到 D:\备份,太烦了,写个脚本帮我复制一下。”
原则:一次只解决一个问题。
- 批量重命名当前文件夹下的所有
.jpg文件。 - 自动 ping 一个网站,如果不通就发出声音提示。
- 读取一个
.csv文件,统计其中某列的数据。
第二步:选择语言和环境(建议从 Shell 或 Python 开始)
| 场景 | 推荐语言 | 理由 |
|---|---|---|
| 文件/系统操作 (Linux/macOS) | Bash (Shell脚本) | 无依赖,直接运行,处理文件和管道极快 |
| 文件/系统操作 (Windows) | PowerShell | 系统内置,比 CMD 强大,处理对象很顺手 |
| 粘合代码、处理数据、爬虫、自动化 (跨平台) | Python | 语法简单,库极其丰富(os, re, requests, openpyxl) |
入门建议:从你操作系统自带的 shell 开始,如果你是Windows用户,可以试试 PowerShell;Mac/Linux用户直接用命令行,如果想做复杂一点的事(比如处理Excel),Python是最好的选择。
第三步:编写脚本(基于真实案例)
假设我们要写一个非常实用的脚本:批量将当前目录及子目录下的所有 .pdf 文件,复制到一个 all_pdfs 文件夹中。
用 Bash 写(Linux/macOS/WSL/Git Bash)
- 新建文件
collect_pdfs.sh - 写入以下内容:
#!/bin/bash
# 目标文件夹名称
TARGET_DIR="all_pdfs"
# 1. 创建目标文件夹(如果不存在)
mkdir -p "$TARGET_DIR"
# 2. 查找所有 .pdf 文件(递归),复制到目标文件夹
# find 命令找到文件,-exec 对每个文件执行 cp 命令
find . -type f -name "*.pdf" -exec cp {} "$TARGET_DIR/" \;
# 3. 打印成功信息
echo "已复制所有 PDF 文件到 $TARGET_DIR 文件夹。"
# 可选:统计复制了多少个
count=$(find . -type f -name "*.pdf" | wc -l)
echo "共计找到 $count 个文件。"
- 运行脚本:
- 在终端中,进入脚本所在目录。
- 赋予执行权限(仅Linux/macOS需要):
chmod +x collect_pdfs.sh - 运行:
./collect_pdfs.sh
用 PowerShell 写(Windows)
- 新建文件
collect_pdfs.ps1 - 写入以下内容:
# 目标文件夹名称
$targetDir = "all_pdfs"
# 1. 创建目标文件夹
New-Item -ItemType Directory -Force -Path $targetDir | Out-Null
# 2. 获取当前目录及其子目录下所有 .pdf 文件,复制到目标文件夹
Get-ChildItem -Path . -Filter "*.pdf" -Recurse | ForEach-Object {
Copy-Item -Path $_.FullName -Destination "$targetDir\$($_.Name)"
# 可以添加一点反馈,显示正在复制哪个文件
Write-Host "复制: $($_.Name)"
}
# 3. 统计数量
$count = (Get-ChildItem -Path . -Filter "*.pdf" -Recurse).Count
Write-Host "✅ 已完成,共从子文件夹复制了 $count 个 PDF 文件到 $targetDir 文件夹。"
- 运行脚本:
- 按
Win + X,选择Windows PowerShell (管理员)或终端 (管理员)。 - 首次运行可能需要执行一次
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser来允许运行本地脚本。 - 进入脚本所在目录,执行
.\collect_pdfs.ps1。
- 按
用 Python 写(跨平台,推荐做更复杂的事)
- 新建文件
collect_pdfs.py - 写入以下内容:
import os
import shutil
from pathlib import Path
# 1. 目标文件夹
target_dir = Path("all_pdfs")
target_dir.mkdir(exist_ok=True)
# 2. 遍历当前目录及其子目录
count = 0
for pdf_file in Path(".").rglob("*.pdf"):
# 构建目标路径(复制到目标文件夹,保留原文件名)
destination = target_dir / pdf_file.name
# 处理重名文件:如果在目标文件夹已经存在,则在文件名后加 (1), (2)...
if destination.exists():
stem = pdf_file.stem # 文件名(不含扩展名)
suffix = pdf_file.suffix # 扩展名
counter = 1
while True:
new_name = f"{stem}_{counter}{suffix}"
new_destination = target_dir / new_name
if not new_destination.exists():
destination = new_destination
break
counter += 1
shutil.copy2(pdf_file, destination) # copy2 会保留文件元数据
print(f"复制: {pdf_file.name} -> {destination.name}")
count += 1
print(f"✅ 完成!共复制 {count} 个 PDF 文件到 {target_dir} 文件夹。")
- 运行脚本:
- 确保安装了 Python(
python --version验证)。 - 在终端中,进入脚本所在目录,运行
python collect_pdfs.py。
- 确保安装了 Python(
第四步:测试、优化与固化(成为日常工具)
- 测试:先在一个测试文件夹里放几个假 PDF 文件运行,确认脚本行为符合预期(不会误删文件、会处理重名等)。
- 添加注释:几个月后你可能忘了这段代码的意思,现在写下几行注释解释核心逻辑。
- 固化:
- Linux/macOS:将脚本移动到
~/bin/或/usr/local/bin/,并去掉.sh后缀,然后就可以在任意位置直接输入collect_pdfs来运行了。 - Windows:将
.ps1文件放在一个固定位置(如C:\Scripts\),然后创建一个别名(在 PowerShell profile中加一行:Set-Alias collect C:\Scripts\collect_pdfs.ps1),或者添加该文件夹到系统 PATH 中。 - Python:可以在脚本第一行加上
#!/usr/bin/env python3,设置可执行权限后同样可以当命令用。
- Linux/macOS:将脚本移动到
如果遇到困难怎么办?(常见调试技巧)
- 打印调试信息:在关键步骤后加上
print()或echo,查看变量值和程序走向。 - 逐句搜索:报错信息是黄金,把报错信息直接复制到搜索引擎里搜,至少有80%的概率能找到解决方案。
- 安全第一:涉及删除、覆盖、修改操作时,优先写“只读”脚本(如只打印文件名,不实际删除),确认无误后再添加执行代码。
最后的建议
第一个实用脚本,解决你最烦的那个小问题就好。 它不需要超过20行,不需要处理所有边缘情况,当你好不容易手动做了5次重复操作后,花15分钟写一个脚本让它自己跑一遍,那份成就感会让你爱上写脚本。