Windows下批量删除无对应JPG的同名RAW文件的最快方法
嘿,这个需求太普遍了——清理掉那些没对应JPG的RAW文件,我给你几个靠谱的方法,按需选择:
方法一:Windows PowerShell(最推荐,灵活且安全)
PowerShell逻辑清晰,还能先预览要删除的文件,不容易误操作。步骤如下:
- 打开你的图片文件夹,按住Shift键右键空白处,选择「在此处打开PowerShell窗口」
- 执行下面的命令(记得把
.CR2换成你实际的RAW格式,比如.NEF、.ARW、.DNG这些):
# 先收集所有保留下来的JPG文件名(不带扩展名) $jpgFilenames = Get-ChildItem -Filter "*.jpg" -File | ForEach-Object { $_.BaseName } # 找出没有对应JPG的RAW文件,先预览要删除的内容 Get-ChildItem -Filter "*.CR2" -File | Where-Object { $jpgFilenames -notcontains $_.BaseName } | Remove-Item -WhatIf
- 执行后会列出所有将要删除的RAW文件,确认没问题后,去掉命令末尾的
-WhatIf再执行一次,就会真正删除这些文件。
方法二:CMD命令提示符(适合习惯旧命令行的用户)
如果你更熟悉CMD,可以用批处理脚本:
- 在图片文件夹里新建一个文本文件,把下面的内容粘贴进去,然后把扩展名改成
.bat - 把脚本里的
.CR2替换成你的RAW格式,保存后双击运行:
@echo off setlocal enabledelayedexpansion :: 替换成你的RAW文件扩展名,比如.NEF/.ARW/.DNG set "RAW_EXT=.CR2" :: 先记录所有存在的JPG文件名 for %%f in (*.jpg) do ( set "jpg_exists_%%~nf=1" ) :: 遍历所有RAW文件,删除没有对应JPG的 for %%f in (*%RAW_EXT%) do ( if not defined jpg_exists_%%~nf ( echo 待删除:"%%f" :: 确认无误后,把下面一行的rem删掉,就能执行删除 :: del "%%f" ) ) pause endlocal
- 第一次运行会只列出要删的文件,确认后去掉
del前面的rem,再运行就会删除。
方法三:可视化操作(适合完全不想碰命令的用户)
如果实在不想用命令行,可以借助Windows资源管理器的搜索+筛选,配合批量选择:
- 在图片文件夹右上角搜索框输入
*.jpg,全选所有搜索结果,右键→「复制」(或者记住这些文件名的前缀) - 清空搜索框,输入你的RAW格式(比如
*.CR2),得到所有RAW文件 - 按名称排序,然后对比JPG的列表,选中那些没有对应JPG的RAW文件删除。不过这个方法适合文件数量不多的情况,成千上百张的话还是命令行效率高。
⚠️ 重要提醒:不管用哪种方法,操作前一定要先备份整个文件夹,或者用预览命令确认要删除的文件,避免误删重要内容!
内容的提问来源于stack exchange,提问作者Robert Tausig




