如何从多层嵌套文件夹中按条件批量复制指定CSV文件
批量提取指定CSV文件的高效实现方案
以下方案均不需要手动逐个文件夹操作,1分钟内即可完成全部复制工作,根据自己的系统选对应的方法即可。
方案1:Windows系统 原生命令实现(无需安装额外软件)
- 先在
main文件夹的同级位置新建一个空文件夹,命名为csv_output(名字可自行修改) - 打开
main文件夹所在的目录,点击顶部地址栏,输入cmd后按回车,会直接弹出定位到当前路径的命令提示符窗口 - 把下面的命令粘贴到窗口里按回车执行即可:
for /d %i in (main\main_*) do @copy "%i\a1.csv" csv_output\ & @copy "%i\b2.csv" csv_output\ & @copy "%i\c3.csv" csv_output\
- 如果不同子文件夹里的同名CSV内容不同,为了避免覆盖丢文件,用下面的命令,复制后的文件会自动带上所属子文件夹的前缀(比如
main_1_a1.csv):
for /d %i in (main\main_*) do @copy "%i\a1.csv" "csv_output\%~ni_a1.csv" & @copy "%i\b2.csv" "csv_output\%~ni_b2.csv" & @copy "%i\c3.csv" "csv_output\%~ni_c3.csv"
方案2:macOS/Linux系统 终端命令实现
- 先打开终端,通过
cd命令进入main文件夹所在的上级目录 - 执行
mkdir -p csv_output新建用来存结果的空文件夹 - 执行以下命令完成批量复制:
find ./main -type f \( -name "a1.csv" -o -name "b2.csv" -o -name "c3.csv" \) -exec cp {} ./csv_output/ \;
- 同样需要避免同名覆盖的话,用这个命令,自动给文件加子文件夹前缀:
find ./main -type f \( -name "a1.csv" -o -name "b2.csv" -o -name "c3.csv" \) -exec sh -c 'cp "$0" "./csv_output/$(basename $(dirname $0))_$(basename $0)"' {} \;
方案3:全平台通用Python脚本(适合对命令行不熟悉的用户)
只要电脑装了Python环境,不管什么系统都能用,逻辑透明不容易出错:
- 在
main文件夹的同级位置新建一个名为copy_task.py的文件,把下面的代码粘贴进去保存:
import os import shutil # 可根据自己的实际需求修改配置 SOURCE_FOLDER = "main" OUTPUT_FOLDER = "csv_output" NEED_EXTRACT = {"a1.csv", "b2.csv", "c3.csv"} ADD_SUBFOLDER_PREFIX = True # 设为False则保留原文件名,可能出现覆盖 os.makedirs(OUTPUT_FOLDER, exist_ok=True) for subfolder in os.listdir(SOURCE_FOLDER): sub_path = os.path.join(SOURCE_FOLDER, subfolder) if not os.path.isdir(sub_path): continue for file in os.listdir(sub_path): if file in NEED_EXTRACT: src = os.path.join(sub_path, file) dst_name = f"{subfolder}_{file}" if ADD_SUBFOLDER_PREFIX else file dst = os.path.join(OUTPUT_FOLDER, dst_name) shutil.copy2(src, dst) print(f"复制完成: {src} → {dst}")
- 在当前目录打开终端/命令提示符,执行
python copy_task.py即可,运行过程中会打印所有复制成功的文件路径,方便核对。
注意:执行复制前先确认3个目标文件名的拼写完全正确,避免漏拷;如果不同子文件夹下存在同名但内容不同的CSV,务必开启前缀命名功能,防止文件被覆盖丢失。
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

