批量整理CR2文件到JPG分类目录
你可以通过以下步骤批量将CR2文件按照已分类的JPG文件夹结构进行整理:
方法一:使用批处理脚本(Windows)
准备文件夹结构:
确保所有JPG已经分类到对应文件夹中
将所有CR2文件放在一个单独的文件夹里(如
All_CR2)创建批处理脚本:
新建一个文本文件,输入以下代码,保存为organize_cr2.bat:
@echo off setlocal enabledelayedexpansion set "jpg_root=你的JPG根文件夹路径" set "cr2_source=All_CR2文件夹路径" set "destination=你要存放CR2分类结果的根路径" for /r "%jpg_root%" %%f in (*.jpg) do ( set "jpg_path=%%f" set "jpg_name=%%~nf" if exist "%cr2_source%\!jpg_name!.CR2" ( set "relative_path=%%~pf" set "relative_path=!relative_path:%jpg_root%=!" mkdir "%destination%!relative_path!" 2>nul move "%cr2_source%\!jpg_name!.CR2" "%destination%!relative_path!" ) ) pause
方法二:使用Python脚本
保存以下代码为
organize_cr2.py:
import osimport shutil# 配置路径jpg_root = "你的JPG根文件夹路径"cr2_source = "All_CR2文件夹路径"destination_root = "CR2分类目标路径"for root, dirs, files in os.walk(jpg_root):
for file in files:
if file.lower().endswith('.jpg'):
jpg_path = os.path.join(root, file)
cr2_file = os.path.splitext(file)[0] + '.CR2'
cr2_source_path = os.path.join(cr2_source, cr2_file)
if os.path.exists(cr2_source_path):
# 计算相对路径
relative_path = os.path.relpath(root, jpg_root)
dest_folder = os.path.join(destination_root, relative_path)
dest_path = os.path.join(dest_folder, cr2_file)
# 创建目录并移动文件
os.makedirs(dest_folder, exist_ok=True)
shutil.move(cr2_source_path, dest_path)
print(f"Moved {cr2_file} to {dest_path}")方法三:使用文件管理工具
Total Commander:
同时打开JPG文件夹和CR2文件夹
使用"同步文件夹"功能,按文件名匹配
Adobe Bridge:
筛选显示所有CR2文件
通过"批量重命名"功能,使用JPG文件的目录结构
注意事项:
操作前建议先备份CR2原始文件
检查文件名是否完全一致(包括大小写)
如果JPG经过重命名而CR2未重命名,需要先统一文件名
以上方法都会按照JPG已有的分类结构,将同名的CR2文件移动到对应的文件夹中。Python脚本方法最为灵活,可以处理更复杂的情况。
明白了!你的 CR2 文件 目前全部在一个文件夹里,而 JPG 文件 已经按照类别(如“纯天丝阔腿裤”“工装裤”)分类存放。
现在,你想 让 CR2 文件也按照 JPG 的文件夹结构分类,即:
如果
纯天丝阔腿裤文件夹下有2025-04-01-IMG-00410.JPG,
就把2025-04-01-IMG-00410.CR2移动到纯天丝阔腿裤文件夹。
推荐方法:Python 脚本自动分类(最可靠)
步骤 1:准备文件结构
假设你的 JPG 分类结构如下:
JPG_Root/ ├── 纯天丝阔腿裤/ │ ├── 2025-04-01-IMG-00410.JPG │ ├── 2025-04-01-IMG-00411.JPG │ └── ... ├── 工装裤/ │ ├── 2025-04-01-IMG-01291.JPG │ ├── 2025-04-01-IMG-01292.JPG │ └── ... └── ...
所有 CR2 文件放在一个文件夹里,如
All_CR2/:All_CR2/ ├── 2025-04-01-IMG-00410.CR2 ├── 2025-04-01-IMG-00411.CR2 ├── 2025-04-01-IMG-01291.CR2 ├── 2025-04-01-IMG-01292.CR2 └── ...
步骤 2:运行 Python 脚本
脚本功能:
遍历所有 JPG 文件的路径,提取文件名(不带
.JPG)。在
All_CR2/里查找同名.CR2文件。把
.CR2文件移动到对应 JPG 所在的文件夹。
代码(保存为 organize_cr2.py):
import osimport shutil# 配置路径(请修改为你的实际路径)jpg_root = "JPG_Root" # JPG 分类的根目录cr2_source = "All_CR2" # 所有 CR2 存放的目录destination_root = "JPG_Root" # 可选:如果想单独存放 CR2,可以改成一个新目录# 遍历所有 JPG 文件for root, dirs, files in os.walk(jpg_root):
for file in files:
if file.upper().endswith(".JPG"):
jpg_name = os.path.splitext(file)[0] # 去掉 .JPG,只保留文件名
cr2_file = f"{jpg_name}.CR2" # 对应的 CR2 文件名
cr2_path = os.path.join(cr2_source, cr2_file)
# 如果 CR2 文件存在,就移动到 JPG 所在目录
if os.path.exists(cr2_path):
dest_folder = root # 保持和 JPG 同目录
# 如果想放到新目录(如 CR2_Root),可以改成:
# dest_folder = os.path.join(destination_root, os.path.relpath(root, jpg_root))
os.makedirs(dest_folder, exist_ok=True) # 确保目录存在
shutil.move(cr2_path, os.path.join(dest_folder, cr2_file))
print(f"移动: {cr2_file} -> {dest_folder}")
else:
print(f"未找到匹配的 CR2: {cr2_file}")print("整理完成!")步骤 3:运行脚本
确保已安装 Python(官网下载)。
在终端运行:
python organize_cr2.py
脚本会自动把
.CR2文件移动到对应.JPG所在的文件夹。
替代方法(无需编程)
方法 1:使用 Total Commander(文件管理器)
打开 Total Commander(或其他双窗格文件管理器)。
左窗格:进入
All_CR2/(CR2 所在目录)。右窗格:进入
JPG_Root/(JPG 分类目录)。使用 “同步文件夹” 功能,按文件名匹配移动
.CR2文件。
方法 2:使用 Advanced Renamer(批量处理工具)
下载 Advanced Renamer。
加载所有
.CR2文件。使用 “从文件名映射” 功能,按
.JPG文件路径整理.CR2。
总结
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Python 脚本 | 文件量大、需要精准匹配 | 完全自动化,可自定义 | 需要 Python 基础 |
| Total Commander | 少量文件、手动调整 | 可视化操作 | 需要手动确认 |
| Advanced Renamer | 不想写代码 | 图形界面操作 | 需要额外软件 |
推荐 Python 脚本,因为它最可靠、可批量处理上千文件。
如果有问题,可以告诉我你的操作系统(Win/Mac/Linux),我可以优化方案!
明白了!你的 JPG 分类目录 是 /Volumes/HDD/2025/2025_04_01/JPEG/,而 CR2 文件 目前全部放在另一个文件夹(比如 /Volumes/HDD/2025/2025_04_01/CR2/)。
现在,你想 让 CR2 文件按照 JPG 的文件夹结构分类,即:
如果
/Volumes/HDD/2025/2025_04_01/JPEG/纯天丝阔腿裤/2025-04-01-IMG-00410.JPG存在,
就把/Volumes/HDD/2025/2025_04_01/CR2/2025-04-01-IMG-00410.CR2移动到/Volumes/HDD/2025/2025_04_01/JPEG/纯天丝阔腿裤/。
优化后的 Python 脚本(适用于 macOS/Linux)
脚本调整
自动识别 JPG 目录结构,并匹配 CR2 文件。
保留原始 CR2 文件(可改为
shutil.copy复制而非移动)。支持大小写文件名(如
.JPG和.jpg都能匹配)。
代码(保存为 organize_cr2.py)
import osimport shutil# 配置路径(请修改为你的实际路径)jpg_root = "/Volumes/HDD/2025/2025_04_01/JPEG" # JPG 分类的根目录cr2_source = "/Volumes/HDD/2025/2025_04_01/CR2" # 所有 CR2 存放的目录# 遍历所有 JPG 文件,并移动匹配的 CR2for root, dirs, files in os.walk(jpg_root):
for file in files:
if file.upper().endswith((".JPG", ".JPEG")): # 支持 .JPG 和 .JPEG
jpg_name = os.path.splitext(file)[0] # 去掉扩展名
cr2_file = f"{jpg_name}.CR2" # 对应的 CR2 文件名
cr2_path = os.path.join(cr2_source, cr2_file)
if os.path.exists(cr2_path):
dest_folder = root # CR2 移动到 JPG 所在目录
shutil.move(cr2_path, os.path.join(dest_folder, cr2_file))
print(f"移动: {cr2_file} -> {dest_folder}")
else:
print(f"未找到匹配的 CR2: {cr2_file}")print("整理完成!")如何运行?
1. 打开终端(Terminal)
macOS:按
Cmd + Space,输入Terminal打开。Linux:按
Ctrl + Alt + T打开终端。
2. 运行脚本
cd /Volumes/HDD/2025/2025_04_01/ # 进入你的照片目录python3 organize_cr2.py # 运行脚本
3. 检查结果
脚本会自动把
.CR2文件移动到对应的 JPG 文件夹。如果 CR2 文件没有匹配的 JPG,会提示
未找到匹配的 CR2。
可选优化
1. 只复制 CR2(不删除原始文件)
修改:
shutil.copy(cr2_path, os.path.join(dest_folder, cr2_file)) # 复制而非移动
2. 把 CR2 存放到另一个目录(如 /CR2_Sorted/)
修改:
destination_root = "/Volumes/HDD/2025/2025_04_01/CR2_Sorted"dest_folder = os.path.join(destination_root, os.path.relpath(root, jpg_root))
替代方法(不写代码)
方法 1:使用 rsync(命令行)
# 先创建目标文件夹结构(和 JPG 一致)rsync -a --include='*/' --exclude='*' /Volumes/HDD/2025/2025_04_01/JPEG/ /Volumes/HDD/2025/2025_04_01/CR2_Sorted/# 匹配并复制 CR2 文件find /Volumes/HDD/2025/2025_04_01/JPEG/ -type f -name "*.JPG" | while read jpg; do
cr2_name="$(basename "${jpg%.*}.CR2")"
if [ -f "/Volumes/HDD/2025/2025_04_01/CR2/$cr2_name" ]; then
dest="$(dirname "${jpg/JPEG/CR2_Sorted}")"
mkdir -p "$dest"
cp "/Volumes/HDD/2025/2025_04_01/CR2/$cr2_name" "$dest/"
fidone方法 2:使用 Automator(macOS 图形化工具)
打开 Automator → 新建“工作流程”。
添加 “运行 Shell 脚本” 操作,粘贴类似
rsync的命令。保存并运行。
总结
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Python 脚本 | 文件量大、精准匹配 | 完全自动化 | 需要 Python |
| rsync + find | 熟悉命令行 | 无需安装额外工具 | 命令较复杂 |
| Automator | 不想用终端 | 图形化操作 | 灵活性较低 |
推荐 Python 脚本,因为它最灵活、可调整。
如果遇到问题,可以告诉我,我会帮你优化! 🚀
明白了!你的需求是:
JPG 分类目录:
/Volumes/HDD/2025/2025_04_01/JPEG/(已分类,如JPEG/纯天丝阔腿裤/xxx.JPG)CR2 原始目录:
/Volumes/HDD/2025/2025_04_01/CR2/(所有.CR2文件直接放在这里)CR2 目标目录:
/Volumes/HDD/2025/2025_04_01/CR2/分类/(最终按 JPG 的结构分类存放.CR2)
最终优化脚本
功能
直接读取 JPG 的文件夹结构,在
CR2/分类/下创建相同目录。将
CR2/下的.CR2文件移动到对应CR2/分类/的子文件夹。
代码(保存为 organize_cr2_final.py)
import osimport shutil# 配置路径jpg_root = "/Volumes/HDD/2025/2025_04_01/JPEG" # JPG 分类根目录cr2_source = "/Volumes/HDD/2025/2025_04_01/CR2" # CR2 原始目录cr2_dest_root = "/Volumes/HDD/2025/2025_04_01/CR2/分类" # CR2 目标目录# 遍历所有 JPG 文件,并移动匹配的 CR2for root, dirs, files in os.walk(jpg_root):
for file in files:
if file.upper().endswith((".JPG", ".JPEG")): # 匹配 .JPG 或 .JPEG
jpg_name = os.path.splitext(file)[0] # 去掉扩展名
cr2_file = f"{jpg_name}.CR2" # 对应的 CR2 文件名
cr2_path = os.path.join(cr2_source, cr2_file)
if os.path.exists(cr2_path):
# 计算目标路径(将 JPG 路径中的 "JPEG" 替换为 "CR2/分类")
relative_path = os.path.relpath(root, jpg_root)
dest_folder = os.path.join(cr2_dest_root, relative_path)
os.makedirs(dest_folder, exist_ok=True) # 创建目标文件夹
# 移动文件
shutil.move(cr2_path, os.path.join(dest_folder, cr2_file))
print(f"移动: {cr2_file} -> {dest_folder}")
else:
print(f"未找到匹配的 CR2: {cr2_file}")print("整理完成!")如何使用?
1. 终端运行
cd /Volumes/HDD/2025/2025_04_01/ # 进入照片目录python3 organize_cr2_final.py # 运行脚本
2. 预期结果
脚本会在
CR2/分类/下创建和JPEG/相同的文件夹结构:CR2/分类/ ├── 纯天丝阔腿裤/ │ ├── 2025-04-01-IMG-00410.CR2 │ ├── 2025-04-01-IMG-00411.CR2 │ └── ... ├── 工装裤/ │ ├── 2025-04-01-IMG-01291.CR2 │ ├── 2025-04-01-IMG-01292.CR2 │ └── ... └── ...
原始
CR2/目录中的文件会被移动(非复制)到对应位置。
常见问题
1. 如果 CR2 文件名和 JPG 不完全匹配?
检查文件名是否一致(包括大小写、空格、特殊字符)。
如果 JPG 被重命名过,需要先统一名称。
2. 想保留原始 CR2 文件(不移动,只复制)?
修改脚本中的 shutil.move 为 shutil.copy:
shutil.copy(cr2_path, os.path.join(dest_folder, cr2_file)) # 复制而非移动
3. 脚本报错 Permission denied?
确保你有权限访问
/Volumes/HDD/。如果是外接硬盘,尝试卸载后重新挂载。
替代方案(无需 Python)
使用 rsync 命令(macOS/Linux)
# 创建目标文件夹结构(和 JPG 相同)rsync -a --include='*/' --exclude='*' /Volumes/HDD/2025/2025_04_01/JPEG/ /Volumes/HDD/2025/2025_04_01/CR2/分类/
# 匹配并移动 CR2 文件find /Volumes/HDD/2025/2025_04_01/JPEG/ -type f -name "*.JPG" | while read jpg; do
cr2_name="$(basename "${jpg%.*}.CR2")"
if [ -f "/Volumes/HDD/2025/2025_04_01/CR2/$cr2_name" ]; then
dest="/Volumes/HDD/2025/2025_04_01/CR2/分类/$(dirname "${jpg#/Volumes/HDD/2025/2025_04_01/JPEG/}")"
mkdir -p "$dest"
mv "/Volumes/HDD/2025/2025_04_01/CR2/$cr2_name" "$dest/"
fidone总结
推荐 Python 脚本:灵活、可扩展,适合大量文件。
rsync 命令:快速但需要熟悉命令行。
操作前建议先备份 CR2 文件(以防误操作)。
如果有其他需求,欢迎继续提问!
