教你批量复制文件夹并重命名:Windows 批处理 / PowerShell / Python / Shell 一次讲透
之前做项目模板初始化的时候,遇到了一个很枯燥的需求:有一个标准模板目录,需要在短时间内复制出几十份,并且每份都要改成对应的项目名。比如 project_001、project_002……手动复制也可以做,但复制 50 次之后再逐个重命名,差不多要花掉一小时,而且过程中很容易漏改、错改。后来干脆停下来,分别用 Windows 批处理、PowerShell、Python 和 Linux Shell 各写了一套批量处理脚本,把整个流程彻底自动化。这篇文章就把这套实战经验完整分享出来,适合经常和各种文件目录打交道的开发、测试、运维,也适合刚接触命令行和脚本编写的新手。你不需要全部掌握四套方案,挑一个适合自己工作环境的,照着改就能用。
1. 背景与核心概念
1.1 什么是“批量复制文件夹并重命名”
批量复制文件夹并重命名,本质上是一组重复操作:先把一个源文件夹作为模板复制出多份,再为每一份副本指定不同的目标名称。这里的“重命名”不一定是复制完成后再改,也可以在复制的同时就把目标名称定下来。
举个例子,假设你有一个 template 文件夹,里面是一个 Spring Boot 项目的基础骨架,现在需要为 30 个新项目各准备一份独立代码库。合理做法就是复制 30 份 template,然后分别重命名为 project_01、project_02……这就是典型的批量复制加重命名。
这个过程如果只用鼠标操作,需要重复“Ctrl+C → Ctrl+V → 右键重命名”三步,复制一次没问题,复制 30 次就非常浪费时间。脚本化之后,一条命令就能完成全部工作。
1.2 批量复制与批量重命名的关系
有一部分用户提到“批量重命名文件”“linux 用 shell 重命名文件”,其实和本文的“批量复制文件夹并重命名”是同一个大类里的两个场景:
- 批量重命名文件:文件已经存在,只做改名,不涉及复制。
- 批量复制文件或文件夹并重命名:从模板复制出多个副本,副本名和模板名不同。
本文重点讨论第二种场景。但在实际工程中,两者经常结合使用:复制模板后,可能还要对内部的文件继续做二次重命名,比如把 project_xxx 字符串替换成新的项目代号。脚本方案可以一条龙处理,这也是手工操作很难替代的优势。
1.3 常见应用场景
从实际使用来看,这类批量操作最常见的场景有:
- 项目初始化:用统一脚手架目录为多个新项目生成独立代码库。
- 测试数据准备:批量生成带编号的测试目录,供自动化测试使用。
- 备份与归档:按日期或版本批量复制文件目录,例如
backup_20250101、backup_20250102。 - 内容模板分发:复制合同模板、报告模板、图片素材目录,并按客户名或单号重命名。
- CI/CD 流水线:在构建前批量生成各环境配置文件目录。
也就是说,只要出现“一个模板,多个实例”的诉求,都能用这类批量脚本提高效率。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与版本说明
本文涉及的方案覆盖 Windows 和 Linux 两大平台。各方案的依赖如下。
2.1 Windows 环境
- 操作系统:Windows 10 / Windows 11,或 Windows Server 2016+。
- Windows 自带的命令提示符(cmd.exe),批处理脚本使用扩展名为
.bat或者.cmd的文件。 - PowerShell 5.1 或 7.x,Windows 系统自带 PowerShell 5.1,PowerShell 7 需要单独安装。
- robocopy 命令在 Windows 7 之后默认可用,xcopy 在 Windows 10 之后仍可使用,但微软官方更推荐 robocopy。
版本并不需要特殊配置,关键在于你用的命令行工具本身。示例代码会兼顾常见的 cmd 批处理和 PowerShell 写法。
2.2 Linux / macOS 环境
- 操作系统:CentOS 7+、Ubuntu 18.04+、macOS 等。
- shell 环境:bash 4+,这是大多数发行版默认 shell。
- 基础命令:cp、mv、rename 或 sed。
- 注意
rename命令在 Linux 不同发行版上的语法差异较大,这一点会在后面的原理部分单独说明。
2.3 Python 环境
- Python 3.6+,不需要安装第三方库,只用标准库
os、shutil。 - 适合需要在 Windows 和 Linux 上统一运行脚本的读者。
2.4 目录结构设计
为了描述方便,本文把整个实验目录设计成如下结构:
text复制D:\demo
├─ template # 模板目录,里面可以放任意文件
├─ output # 生成的副本目录
├─ batch_copy.bat # Windows 批处理脚本
├─ batch_copy.ps1 # PowerShell 脚本
└─ batch_copy.py # Python 脚本
Linux 下同样类比:
text复制~/demo
├── template
├── output
├── batch_copy.sh
└── batch_copy.py
模板目录里建议放入几个测试文件,比如 readme.txt、config.xml,用于验证复制结果是否完整。
3. 核心语法与原理拆解
3.1 复制与重命名的本质
很多人会把“复制文件夹”和“重命名”当成两个必须分开的动作,但实际上,多数复制命令本身支持在复制的同时设置目标名称。
比如 Windows 的:
bat复制copy template\readme.txt output\new_readme.txt
这条命令把 readme.txt 复制到 output 目录下,并直接命名为 new_readme.txt。复制的同时就完成了重命名。
文件夹也是类似的:
bat复制xcopy template output\project_001 /e /i
这里把 template 目录整体复制到 output/project_001。虽然看起来像是复制,但目标目录名已经指定为新的名字 project_001,所以不需要事后用 ren 再改。
Linux 下的做法同样直观:
bash复制cp -r template output/project_001
cp 的源路径是 template,目标路径是 output/project_001,复制过程中直接完成了重命名。
理解了这一点,批量操作的核心就变成了:循环生成目标名称,然后循环执行复制命令。
3.2 Windows 批处理中的变量延迟问题
写 .bat 脚本时,新手最容易踩的坑就是变量延迟展开。
在 cmd 中,默认情况下循环体内的变量在被读取时是“展开”的,而不是“执行到那一步再读取”。看下面的例子:
bat复制@echo off
for /l %%i in (1,1,5) do (
set num=%%i
echo !num!
)
这段代码如果不开启延迟变量,!num! 可能显示成空或者不是预期的值。正确做法是脚本开头加一行:
bat复制setlocal enabledelayedexpansion
在批处理脚本前加入这行,然后循环内使用 !变量名! 而不是 %变量名%,变量就会在运行时实时计算。
此外,.bat 里 for 循环的变量引用有自己的规则:
- 在命令行窗口直接执行时,用
%i。 - 在批处理脚本中,用
%%i。
这个细节非常容易忽略,也是很多复制脚本“双击运行没有效果”的常见原因。
3.3 robocopy 与 xcopy 的差异
Windows 下复制目录,新手常用 xcopy,但它在长路径、大量文件、权限属性保留方面不如 robocopy。两者基础用法对比:
bat复制xcopy template output\project_001 /e /i /h /y
解释参数:
/e:包含空子目录。/i:如果目标不存在,假定目标是目录。/h:复制隐藏文件和系统文件。/y:覆盖已存在的目标文件。
bat复制robocopy template output\project_001 /E /COPYALL
解释参数:
/E:复制所有子目录,包括空目录。/COPYALL:复制文件的所有信息,包括数据、属性、时间戳、安全信息等。
需要注意 robocopy 的退出码不是 0 或 1 这么简单。0-7 都算成功,其中常见的:
- 0:没有文件被复制。
- 1:成功复制文件。
- 2:目标存在多余文件。
- 3:1+2 的组合,某些文件被复制,某些多余文件被清理。
所以在批处理里对 robocopy 做错误判断时,不能直接写 if %errorlevel% neq 0,而要判断 if %errorlevel% geq 8,否则会把正常结果误判为失败。
3.4 Linux shell 中的 cp、mv 与 rename
Linux 下复制目录:
bash复制cp -r template project_001
如果要保留时间戳、权限等属性,用:
bash复制cp -a template project_001
如果只是想重命名一个已经有内容的目录,直接用 mv:
bash复制mv project_old project_new
mv 在同一个文件系统里只是修改名字,不会真的复制数据,速度非常快。
关于 rename,需要特别说明:不同 Linux 发行版提供的 rename 命令并不同源。
- 在 Ubuntu、Debian 上,
rename通常是 Perl 脚本,支持类似rename 's/old/new/' *.txt的正则写法。 - 在 CentOS、Red Hat 上,
rename通常是 util-linux 包提供的,只支持简单字符串替换,写法是rename old new *.txt。
所以,如果你的脚本要跨 Linux 发行版使用,尽量用 mv 加循环来替代 rename,或者在脚本里对命令做兼容判断。
3.5 名称规则的设计
批量复制并重命名,最关键的不是复制命令,而是“名称规则”。名称规则决定了每个副本的新名字,通常有三种方式:
- 固定前缀加序号:
project_001、project_002。 - 根据输入列表命名:读取
names.txt中的名单,每个名字生成一个目录。 - 加日期时间戳:
backup_20250101_1030。
实际项目中第二种最常用,因为目录名往往对应真实业务对象,比如客户编号、城市名、产品编码。第一种适合纯测试场景。第三种适合备份场景。
下面的实战案例里,会分别覆盖这三种方式,其中“读取名单”这种方式我会重点讲,因为它最通用。
4. 完整实战案例
4.1 场景与需求定义
假设现在有一个模板目录 template,模拟一个项目骨架,里面放了这些文件:
text复制template
├─ config.ini
├─ readme.txt
└─ assets
└─ logo.png
现在需要生成 10 个副本目录,名称是 project_001 到 project_010,并统一放到 output 目录下。接下来分别用四种方式实现。
先手动创建模板目录:
bash复制# Linux / macOS
mkdir -p template/assets
touch template/config.ini template/readme.txt
cp /path/to/logo.png template/assets/logo.png
Windows 直接在资源管理器里建目录就行,或者用命令:
bat复制mkdir template\assets
echo test> template\config.ini
echo test> template\readme.txt
4.2 Windows 批处理方案(.bat)
在 D:\demo 下新建 batch_copy.bat,内容如下:
bat复制@echo off
setlocal enabledelayedexpansion
set "SRC=template"
set "OUT=output"
:: 如果输出目录不存在则创建
if not exist "%OUT%" mkdir "%OUT%"
:: 循环生成 1 到 10
for /l %%i in (1,1,10) do (
set "num=0%%i"
set "dirName=project_!num:~-2!"
echo [INFO] 正在复制 %SRC% 到 %OUT%\!dirName!
robocopy "%SRC%" "%OUT%\!dirName!" /E /NFL /NDL /NJH /NJS
)
echo [INFO] 全部复制完成。
pause
说明几个细节:
0%%i是为了生成两位数的数字,比如01、02。!num:~-2!表示取变量num的最后两位,这样010的dirName是10,001的dirName是01,解决了001到010的位数对齐问题。robocopy后面加的/NFL /NDL /NJH /NJS是让输出更简洁,分别表示不列出文件名、不列出目录名、不显示头部、不显示摘要。- 关于
set "dirName=project_!num:~-2!":因为开启了延迟变量扩展,!num:~-2!会在运行时取num的最后 2 个字符。这个写法是批处理里处理多位流水号的一种常用技巧。
如果你非要用 xcopy,可以把核心复制命令替换为:
bat复制xcopy "%SRC%" "%OUT%\!dirName!" /e /i /h /y
推荐用 robocopy,因为 xcopy 对长路径和隐藏文件支持不如它稳定。
4.3 Windows PowerShell 方案(.ps1)
PowerShell 写起来比 cmd 更清晰,尤其是在生成补零序号方面。
新建 batch_copy.ps1:
powershell复制$src = "template"
$out = "output"
$count = 10
if (-not (Test-Path $out)) {
New-Item -ItemType Directory -Path $out | Out-Null
}
for ($i = 1; $i -le $count; $i++) {
$dirName = "project_{0:D2}" -f $i
$dest = Join-Path $out $dirName
Write-Host "[INFO] 正在复制 $src 到 $dest"
Copy-Item -Path $src -Destination $dest -Recurse -Force
}
Write-Host "[INFO] 全部复制完成。"
要点:
{0:D2}是格式化字符串,D2表示至少两位数字,不足补零。这是 PowerShell 中保持序号位数一致的最简单方式。Copy-Item -Recurse可以递归复制目录。-Force表示目标存在时强制覆盖。
需要注意 PowerShell 的执行策略。如果直接右键“使用 PowerShell 运行”或命令行执行,可能需要先放开限制:
powershell复制Set-ExecutionPolicy -Scope Process Bypass
这只是临时放开当前进程的限制,不影响系统全局配置,相对安全。
项目中更推荐的做法是,用 PowerShell 脚本读取一个名单文件 names.txt,按名单逐个复制:
powershell复制$names = Get-Content names.txt
foreach ($name in $names) {
$dest = Join-Path $out $name
Copy-Item -Path $src -Destination $dest -Recurse -Force
}
这种方式的优点是目录名可以完全由业务数据驱动,而不是靠程序生成。
4.4 Python 脚本方案
Python 方案最大的优势是跨平台,同一份脚本在 Windows 和 Linux 都能运行。新建 batch_copy.py:
python复制import os
import shutil
SRC = "template"
OUT = "output"
COUNT = 10
def main():
if not os.path.isdir(SRC):
print(f"[ERROR] 模板目录不存在: {SRC}")
return
os.makedirs(OUT, exist_ok=True)
for i in range(1, COUNT + 1):
dir_name = f"project_{i:02d}"
dest = os.path.join(OUT, dir_name)
print(f"[INFO] 正在复制 {SRC} 到 {dest}")
shutil.copytree(SRC, dest, dirs_exist_ok=True)
print("[INFO] 全部复制完成。")
if __name__ == "__main__":
main()
重点解释:
f"project_{i:02d}"中的02d表示两位整数,不足补零,和 PowerShell 的D2是同一个意思。shutil.copytree(SRC, dest, dirs_exist_ok=True)是 Python 3.8+ 才支持的写法。早期版本没有dirs_exist_ok参数,如果目标存在会报错。- 如果你对 Python 3.7 或更老的版本有兼容需求,可以在复制前先判断目标是否存在,存在则先
shutil.rmtree(dest)。
Python 方案还很容易扩展。比如复制完成后,把模板内所有文件里的 PROJECT_NAME 占位符替换成新目录名:
python复制for root, dirs, files in os.walk(dest):
for file in files:
path = os.path.join(root, file)
with open(path, "r", encoding="utf-8") as f:
content = f.read()
content = content.replace("PROJECT_NAME", dir_name)
with open(path, "w", encoding="utf-8") as f:
f.write(content)
这种“复制 + 内容替换”的组合,是项目脚手架初始化中最实用的进阶功能。
这里给一个小提示:shutil.copytree 的新版本写法在官方文档中标注是 Python 3.8 新引入。如果你用的版本比较老,就把 dirs_exist_ok=True 去掉,并自行判断目录是否已存在。
4.5 Linux Shell 方案
Linux 下用 bash 脚本完成同样任务。新建 batch_copy.sh:
bash复制#!/bin/bash
SRC="template"
OUT="output"
COUNT=10
mkdir -p "$OUT"
for ((i=1; i<=COUNT; i++)); do
dir_name=$(printf "project_%02d" "$i")
dest="$OUT/$dir_name"
echo "[INFO] 正在复制 $SRC 到 $dest"
cp -r "$SRC" "$dest"
done
echo "[INFO] 全部复制完成。"
几个要点:
printf "project_%02d" "$i"是补零的惯用写法。cp -r复制整个目录。如果希望保留时间戳和权限,用cp -a。- 脚本保存后要加执行权限:
bash复制chmod +x batch_copy.sh
./batch_copy.sh
如果需要在复制前自动清理旧的输出目录,在循环开始前加一行:
bash复制rm -rf "$OUT"
但这行命令一定要谨慎使用。生产环境里,rm -rf 后面绑定了错误变量时,会造成严重事故。更安全的写法是先判断路径是不是预期的输出目录:
bash复制if [[ "$OUT" == "output" && -d "$OUT" ]]; then
rm -rf "$OUT"
fi
从名单文件批量生成的写法如下:
bash复制#!/bin/bash
SRC="template"
OUT="output"
NAMES_FILE="names.txt"
mkdir -p "$OUT"
while IFS= read -r name; do
if [[ -z "$name" ]]; then
continue
fi
echo "[INFO] 正在复制 $SRC 到 $OUT/$name"
cp -r "$SRC" "$OUT/$name"
done < "$NAMES_FILE"
echo "[INFO] 全部复制完成。"
这个脚本会逐行读取 names.txt,跳过空行,每行对应一个目录名。
4.6 运行与预期结果
以 Windows 批处理为例,运行后输出目录结构应该是:
text复制output
├─ project_01
│ ├─ config.ini
│ ├─ readme.txt
│ └─ assets
│ └─ logo.png
├─ project_02
├─ project_03
├─ project_04
├─ project_05
├─ project_06
├─ project_07
├─ project_08
├─ project_09
└─ project_10
检查方法也很简单:
bash复制# Linux
ls -la output
# Windows
dir output
其实验证的重点有几项:
- 副本数量是否等于预期数量。
- 每个目录内部的文件是否完整,尤其是隐藏文件和空目录。
- 目录名是否符合命名规则,序号位数是否对齐。
- 如果有内容替换逻辑,抽查替换是否生效。
建议在正式大规模复制前,先把 COUNT 改成 2 跑一次,确认命名和复制结果没问题再改回真实数量。
5. 常见问题与排查思路
在实际操作中,批量复制并重命名会遇到不少问题。下面整理一份高频问题清单。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 批处理脚本双击后窗口一闪而过 | 脚本语法报错,或没有 pause 语句 |
命令行窗口手动运行脚本,查看报错信息 |
文件夹名变成 project_0 而不是 project_01 |
补零逻辑写错 | 使用 %02d(printf)或 D2(PowerShell)格式化 |
| 循环内变量值一直不变 | 没有开启延迟变量 | 脚本开头加 setlocal enabledelayedexpansion,循环内使用 !var! |
| robocopy 执行后返回错误码 | robocopy 退出码 0-7 都算成功 | 判断条件写 if %errorlevel% geq 8 |
| 目标目录存在时报错 | copytree 旧版本不支持覆盖 | 先删除目标或使用 dirs_exist_ok=True |
| 带空格路径复制失败 | 路径没加引号 | Windows 下路径加双引号,Linux 下确保变量路径用引号包裹 |
| 复制后文件时间戳变化 | 使用 cp -r 或普通复制 |
Linux 用 cp -a,Windows 用 robocopy /COPYALL |
rename 命令在 Linux 上报错 |
不同发行版 rename 语法不同 | 优先用 mv 加循环,避免依赖 rename |
5.1 双击批处理窗口一闪而过
这几乎是批处理新手最常见的问题。原因主要是脚本执行到语法错误后,窗口直接结束,用户根本来不及看提示。解决方法:
- 在脚本最后加一行
pause。 - 或者在 cmd 里手动运行脚本,命令如下:
bat复制cd /d D:\demo
batch_copy.bat
这样即使出错,窗口也会保留报错信息。
5.2 Windows 下怎么显示文件后缀
有读者问“文件重命名怎么显示后缀”,这和批量复制重命名其实也有关联。Windows 默认会隐藏已知文件类型的扩展名,这会导致你把 config.txt 改成 project_01 时,实际生成的名字可能是 project_01.txt,看起来就像重命名失败。
打开“文件资源管理器” → “查看”选项卡 → 勾选“文件扩展名”,就能看到完整后缀。命令行里执行 dir 也可以直接看到文件名全貌。
批量重命名时,建议显式写全文件名,避免系统自动加上隐藏扩展名。命令行环境中不受资源管理器设置影响,所以更可控。
5.3 重命名时文件名多出扩展名
比如目标名写成 project_01,但 Windows 资源管理器里显示的却是 project_01.txt。如果你是在资源管理器里操作,而不是脚本,勾选显示文件扩展名后再重命名,把 .txt 一起去掉就行。
如果是在脚本里操作,注意源文件本身带扩展名,比如 template.txt,复制后目标名应该显式写成 project_01.txt,不要省略,否则 Windows 可能自动补全。
5.4 目标路径存在残留旧目录
脚本重复执行时,output 目录下可能已经有上次生成的 project_01。如果复制命令不支持覆盖,会报错或者保留旧内容。处理方式是在循环里先判断:
bat复制if exist "%OUT%\!dirName!" (
echo [WARN] 目录已存在,跳过: %OUT%\!dirName!
) else (
robocopy "%SRC%" "%OUT%\!dirName!" /E
)
Python 脚本也可以改成:
python复制if os.path.exists(dest):
print(f"[WARN] 目标已存在,跳过: {dest}")
continue
这样能避免误删已有数据。是否覆盖已有目录,取决于你的业务策略,但默认“已存在就跳过”更安全。
6. 最佳实践与工程建议
6.1 命名规范先行
不要等到写代码时才想目录名规则。建议先和业务方确认命名格式,比如:
- 是否包含日期。
- 序号位数是 2 位还是 3 位。
- 是否包含特殊字符。
- 是否区分大小写。
目录名尽量避免空格和特殊字符。虽说脚本能处理带引号的路径,但空格可能引发各种隐性坑,比如传给第三方工具时被拆成多个参数。推荐使用字母、数字、下划线、中划线。
6.2 路径参数化与日志输出
脚本里的源目录、输出目录、数量、名单文件不要硬编码在代码深处。要么用脚本开头集中定义配置变量,要么支持命令行参数传入。比如 Python 用 argparse,Shell 用 getopts。这里给一个简单 Python 示例:
python复制import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--src", default="template")
parser.add_argument("--out", default="output")
parser.add_argument("--count", type=int, default=10)
args = parser.parse_args()
同时在每一步输出日志,包括时间、正在复制的目录、执行结果,这样出了问题可以快速定位是第几个失败。
6.3 安全边界与防误操作
复制的风险通常小于删除,但批量复制同样存在隐患:
- 目标目录如果存在同名文件,覆盖策略是什么?建议默认跳过或提示确认。
- 如果脚本里有
rm -rf,一定要在删除前做双重校验,确认当前路径指向预期目录,不是空变量,也不是根目录。 - 生产环境首次使用脚本时,先在临时目录用小规模数据验证。比如先复制 2 个副本,确认结果后再跑全量。
权限方面,如果是公司内部文件服务器或数据库备份目录,必须先确认你有合法操作权限,并且遵循最小权限原则,只在需要改写的路径范围内操作。
6.4 增量复制和性能
超过几百个目录、每个目录里文件很多时,全量复制会比较慢。可以考虑:
- Windows 用
robocopy,它在复制层面经过多次优化,速度优于普通copy。 - Linux 用
rsync,支持增量同步:
bash复制rsync -av --ignore-existing template/ output/project_01/
rsync 支持断点续传、排除规则、压缩传输,适合自动化脚本里处理大量目录。
如果需要频繁执行同类型复制,且数据量很大,可以准备一个统一的“批量复制工具脚本”,把输出目录、命名规则、名单文件都参数化,后续只需要维护一份名单文本即可。
6.5 内容占位符替换
前面提到,复制目录后经常还要修改内部文件里的项目名。推荐在模板目录中使用占位符,比如文件名或文件内容里的 {{PROJECT_NAME}}、PROJECT_NAME,复制后用脚本统一替换。
这样模板可以做到“复制即生效”,不用复制完成后再手工改几十个文件。需要注意:
- 只对纯文本文件做替换,二进制文件不能直接做字符串替换,否则可能损坏文件。
- 替换前最好备份模板,或者在模板目录旁放一个
.bak。 - 编码统一使用 UTF-8。
6.6 脚本的可维护性
最后,脚本不要写完就扔。把它纳入代码仓库管理,并在文件头写清楚:
- 功能说明。
- 使用方式。
- 参数说明。
- 作者和修改日期。
即使是很小的 .bat 脚本,加注释也能在三个月后帮你省下大量回忆时间。
7. 总结与延伸学习
到这里,批量复制文件夹并重命名这个话题就完整梳理了一遍。本文覆盖了 Windows 批处理、PowerShell、Python、Linux Shell 四套方案,核心逻辑都是一样的:确定名称规则,循环复制模板到新目录名。四套方案各有取舍,日常轻量操作用批处理或 Shell 最快,需要跨平台或者做内容替换时,Python 脚本更灵活,建议至少掌握两种。
如果把这篇文章里的技术再多延伸一步,接下来值得研究的方向有:
- 使用
rsync配合--include、--exclude做精细化复制。 - 在 CI/CD 流水线里集成批量目录生成逻辑,比如 Jenkins 或 GitLab CI 中动态创建构建目录。
- 把复制与内容模板引擎结合,例如 Jinja2,生成项目脚手架时自动填充配置。
批量复制与重命名只是文件自动化的一小部分,但它体现了一个通用思路:凡是重复三步以上的操作,都值得花几分钟写成脚本。这种习惯积累下来,能在日常开发中节省大量时间。
整套脚本示例都适合直接复制运行。如果文章对你有帮助,可以收藏备用,用的时候直接改参数即可。也欢迎在评论区分享你常用的批量复制技巧,或者踩过的批处理变量坑。
