如何删除无对应同名txt标注文件的图片?
可行实现方案
以下三种方案覆盖不同使用场景,操作前建议先备份部分文件测试逻辑,避免误删。
方案1:Windows 批处理(无需额外安装软件)
直接在目标文件夹下新建文本文档,复制下方代码后保存为 .bat 后缀的文件,双击运行即可:
@echo off setlocal enabledelayedexpansion :: 可自行在括号内补充需要识别的图片后缀 for %%f in (*.jpg,*.jpeg,*.png,*.bmp,*.gif,*.webp) do ( :: 先把下方del改成echo,运行预览待删除文件确认无误后再改回del if not exist "%%~nf.txt" del "%%f" ) echo 清理完成 pause
方案2:Linux / macOS 终端命令
直接在目标文件夹路径下打开终端,先执行预览命令确认待删除文件:
# 预览待删除图片,可自行补充大括号内的图片后缀 for img in *.{jpg,jpeg,png,bmp,gif,webp}; do [ ! -f "${img%.*}.txt" ] && echo "$img"; done
确认删除列表无误后,执行实际删除命令:
for img in *.{jpg,jpeg,png,bmp,gif,webp}; do [ ! -f "${img%.*}.txt" ] && rm -f "$img"; done
方案3:Python 脚本(跨平台、可定制性高)
适合需要递归处理子文件夹、自定义过滤逻辑的场景,代码如下:
import os # 配置项 target_dir = "./" # 替换为你的图片文件夹路径,./代表脚本当前所在路径 image_exts = [".jpg", ".jpeg", ".png", ".bmp", ".gif", ".webp"] dry_run = True # 先设为True预览删除列表,确认无误后改成False执行删除 for filename in os.listdir(target_dir): name, ext = os.path.splitext(filename) if ext.lower() in image_exts: txt_path = os.path.join(target_dir, f"{name}.txt") if not os.path.exists(txt_path): img_path = os.path.join(target_dir, filename) if dry_run: print(f"待删除:{img_path}") else: os.remove(img_path) print(f"已删除:{img_path}") print("处理完成")
如果需要递归处理子文件夹,把os.listdir替换为os.walk即可。
注意:所有方法首次运行时都建议先开启预览模式,确认删除列表和逻辑正确后再执行实际删除操作,避免数据丢失。
内容的提问来源于stack exchange,提问作者Hassaan Awan
相关产品推荐
相关产品推荐

