批量整理CR2文件到JPG分类目录

admin2025-04-02未分类21
我拍了一批照片,拍摄的时候是cr2 格式的,导出后的图片格式是jpg 格式的,导出jpg 后,将不同类型的图片,分类到不同的文件夹下了,现在的问题是cr2 格式的文件也要按照jpg 同样的方法进行分类, 文件名相同,仅后缀不同,如果批量操作?》

你可以通过以下步骤批量将CR2文件按照已分类的JPG文件夹结构进行整理:

方法一:使用批处理脚本(Windows)

  1. 准备文件夹结构

    • 确保所有JPG已经分类到对应文件夹中

    • 将所有CR2文件放在一个单独的文件夹里(如All_CR2

  2. 创建批处理脚本
    新建一个文本文件,输入以下代码,保存为organize_cr2.bat

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脚本

  1. 保存以下代码为organize_cr2.py

python
复制
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}")

方法三:使用文件管理工具

  1. Total Commander

    • 同时打开JPG文件夹和CR2文件夹

    • 使用"同步文件夹"功能,按文件名匹配

  2. Adobe Bridge

    • 筛选显示所有CR2文件

    • 通过"批量重命名"功能,使用JPG文件的目录结构

注意事项:

  1. 操作前建议先备份CR2原始文件

  2. 检查文件名是否完全一致(包括大小写)

  3. 如果JPG经过重命名而CR2未重命名,需要先统一文件名

以上方法都会按照JPG已有的分类结构,将同名的CR2文件移动到对应的文件夹中。Python脚本方法最为灵活,可以处理更复杂的情况。

你误解我的意思了,cr2 现在没有分类, ,jpeg 格式的已经进行文件夹分类了。 比如 “纯天丝阔腿裤”文件夹下“2025-04-01-IMG-00410.JPG”,“2025-04-01-IMG-00411.JPG”等 148 个文件, 比如“工装裤”文件夹下,“2025-04-01-IMG-01291.JPG”,“2025-04-01-IMG-01292.JPG”,等 109 个文件, 而cr2格式的 1300 个文件都没有分文件夹,我想按照jpg文件的文件名,给cr2格式文件进行分类。

明白了!你的 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):

python
复制
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:运行脚本

  1. 确保已安装 Python(官网下载)。

  2. 在终端运行:

    bash
    复制
    python organize_cr2.py
  3. 脚本会自动把 .CR2 文件移动到对应 .JPG 所在的文件夹。


替代方法(无需编程)

方法 1:使用 Total Commander(文件管理器)

  1. 打开 Total Commander(或其他双窗格文件管理器)。

  2. 左窗格:进入 All_CR2/(CR2 所在目录)。

  3. 右窗格:进入 JPG_Root/(JPG 分类目录)。

  4. 使用 “同步文件夹” 功能,按文件名匹配移动 .CR2 文件。

方法 2:使用 Advanced Renamer(批量处理工具)

  1. 下载 Advanced Renamer

  2. 加载所有 .CR2 文件。

  3. 使用 “从文件名映射” 功能,按 .JPG 文件路径整理 .CR2


总结

方法适用场景优点缺点
Python 脚本文件量大、需要精准匹配完全自动化,可自定义需要 Python 基础
Total Commander少量文件、手动调整可视化操作需要手动确认
Advanced Renamer不想写代码图形界面操作需要额外软件

推荐 Python 脚本,因为它最可靠、可批量处理上千文件。
如果有问题,可以告诉我你的操作系统(Win/Mac/Linux),我可以优化方案!

jpg 文件夹根目录路径:/Volumes/HDD/2025/2025_04_01/JPEG/

明白了!你的 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)

脚本调整

  1. 自动识别 JPG 目录结构,并匹配 CR2 文件。

  2. 保留原始 CR2 文件(可改为 shutil.copy 复制而非移动)。

  3. 支持大小写文件名(如 .JPG 和 .jpg 都能匹配)。

代码(保存为 organize_cr2.py

python
复制
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. 运行脚本

bash
复制
cd /Volumes/HDD/2025/2025_04_01/  # 进入你的照片目录python3 organize_cr2.py           # 运行脚本

3. 检查结果

  • 脚本会自动把 .CR2 文件移动到对应的 JPG 文件夹。

  • 如果 CR2 文件没有匹配的 JPG,会提示 未找到匹配的 CR2


可选优化

1. 只复制 CR2(不删除原始文件)

修改:

python
复制
shutil.copy(cr2_path, os.path.join(dest_folder, cr2_file))  # 复制而非移动

2. 把 CR2 存放到另一个目录(如 /CR2_Sorted/

修改:

python
复制
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(命令行)

bash
复制
# 先创建目标文件夹结构(和 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 图形化工具)

  1. 打开 Automator → 新建“工作流程”

  2. 添加 “运行 Shell 脚本” 操作,粘贴类似 rsync 的命令。

  3. 保存并运行。


总结

方法适用场景优点缺点
Python 脚本文件量大、精准匹配完全自动化需要 Python
rsync + find熟悉命令行无需安装额外工具命令较复杂
Automator不想用终端图形化操作灵活性较低

推荐 Python 脚本,因为它最灵活、可调整。
如果遇到问题,可以告诉我,我会帮你优化! 🚀

jpg 文件夹根目录路径:/Volumes/HDD/2025/2025_04_01/JPEG/ CR2 文件夹根目录路径:/Volumes/HDD/2025/2025_04_01/CR2/ CR2 文件分类后的路径:/Volumes/HDD/2025/2025_04_01/CR2/分类/ 直接移动文件即可

明白了!你的需求是:

  1. JPG 分类目录/Volumes/HDD/2025/2025_04_01/JPEG/(已分类,如 JPEG/纯天丝阔腿裤/xxx.JPG

  2. CR2 原始目录/Volumes/HDD/2025/2025_04_01/CR2/(所有 .CR2 文件直接放在这里)

  3. CR2 目标目录/Volumes/HDD/2025/2025_04_01/CR2/分类/(最终按 JPG 的结构分类存放 .CR2


最终优化脚本

功能

  • 直接读取 JPG 的文件夹结构,在 CR2/分类/ 下创建相同目录。

  • 将 CR2/ 下的 .CR2 文件移动到对应 CR2/分类/ 的子文件夹。

代码(保存为 organize_cr2_final.py

python
复制
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. 终端运行

bash
复制
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

python
复制
shutil.copy(cr2_path, os.path.join(dest_folder, cr2_file))  # 复制而非移动

3. 脚本报错 Permission denied

  • 确保你有权限访问 /Volumes/HDD/

  • 如果是外接硬盘,尝试卸载后重新挂载。


替代方案(无需 Python)

使用 rsync 命令(macOS/Linux)

bash
复制
# 创建目标文件夹结构(和 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 文件(以防误操作)。

如果有其他需求,欢迎继续提问!


发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。