如何编写第一个实用脚本?

wen 实用脚本 2

本文目录导读:

如何编写第一个实用脚本?

  1. 第一步:明确需求(不要追求完美)
  2. 第二步:选择语言和环境(建议从 Shell 或 Python 开始)
  3. 第三步:编写脚本(基于真实案例)
  4. 第四步:测试、优化与固化(成为日常工具)
  5. 如果遇到困难怎么办?(常见调试技巧)
  6. 最后的建议

编写你的第一个实用脚本,关键在于从解决一个真实的、微小的痛点开始,而不是去构建一个庞大的系统,下面是一个通用的、经过验证的“四步法”,可以帮你从零开始,快速写出生效的脚本。


第一步:明确需求(不要追求完美)

不要想:“我要写一个能自动备份所有文件、发送邮件、并具备图形界面的脚本。” 想:“我每天都要手动把 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)

  1. 新建文件 collect_pdfs.sh
  2. 写入以下内容:
#!/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 个文件。"
  1. 运行脚本
    • 在终端中,进入脚本所在目录。
    • 赋予执行权限(仅Linux/macOS需要):chmod +x collect_pdfs.sh
    • 运行:./collect_pdfs.sh

用 PowerShell 写(Windows)

  1. 新建文件 collect_pdfs.ps1
  2. 写入以下内容:
# 目标文件夹名称
$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 文件夹。"
  1. 运行脚本
    • Win + X,选择 Windows PowerShell (管理员)终端 (管理员)
    • 首次运行可能需要执行一次 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 来允许运行本地脚本。
    • 进入脚本所在目录,执行 .\collect_pdfs.ps1

用 Python 写(跨平台,推荐做更复杂的事)

  1. 新建文件 collect_pdfs.py
  2. 写入以下内容:
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} 文件夹。")
  1. 运行脚本
    • 确保安装了 Python(python --version 验证)。
    • 在终端中,进入脚本所在目录,运行 python collect_pdfs.py

第四步:测试、优化与固化(成为日常工具)

  1. 测试:先在一个测试文件夹里放几个假 PDF 文件运行,确认脚本行为符合预期(不会误删文件、会处理重名等)。
  2. 添加注释:几个月后你可能忘了这段代码的意思,现在写下几行注释解释核心逻辑。
  3. 固化
    • 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,设置可执行权限后同样可以当命令用。

如果遇到困难怎么办?(常见调试技巧)

  • 打印调试信息:在关键步骤后加上 print()echo,查看变量值和程序走向。
  • 逐句搜索:报错信息是黄金,把报错信息直接复制到搜索引擎里搜,至少有80%的概率能找到解决方案。
  • 安全第一:涉及删除、覆盖、修改操作时,优先写“只读”脚本(如只打印文件名,不实际删除),确认无误后再添加执行代码。

最后的建议

第一个实用脚本,解决你最烦的那个小问题就好。 它不需要超过20行,不需要处理所有边缘情况,当你好不容易手动做了5次重复操作后,花15分钟写一个脚本让它自己跑一遍,那份成就感会让你爱上写脚本。

抱歉,评论功能暂时关闭!