本文目录导读:

- 第一步:明确需求(不要追求完美)
- 第二步:选择语言和环境(建议从 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分钟写一个脚本让它自己跑一遍,那份成就感会让你爱上写脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播