使用.bat脚本将重复文件移动至子文件夹的问题求助
批处理脚本修改:将重复文件移动到指定文件夹
以下是修改后的脚本,可实现按文件大小判定重复文件,并将重复文件移动到duplicates文件夹:
@echo off setlocal EnableDelayedExpansion :: 创建duplicates文件夹(不存在则创建) if not exist duplicates mkdir duplicates :: 按文件大小分组,存储文件路径 for /R %%a in (*.*) do ( set "size[%%~Za]=!size[%%~Za]!,%%~Fa" ) :: 遍历每个大小分组,处理重复文件 for /F "tokens=2,3* delims=[]=,"" %%a in ('set size[') do ( :: 如果存在至少两个同大小文件 if not "%%c"=="" ( :: 保留第一个文件,移动后续所有同大小文件 for %%d in (%%c) do ( :: 移动文件到duplicates文件夹,/Y参数自动覆盖同名文件 move /Y "%%d" "duplicates\" echo 已移动重复文件:"%%d" ) ) ) pause
关键改动说明
- 替换原脚本的
echo输出逻辑,改为遍历每个重复文件执行移动操作 - 使用
move /Y命令完成移动,/Y参数避免因目标文件夹存在同名文件时弹出确认提示 - 增加日志输出,方便查看哪些文件被移动
注意事项
- 脚本默认保留每个大小分组中的第一个文件,其余同大小文件会被判定为重复文件移动
- 当前仅通过文件大小判定重复,若需要更精准的重复判定(如文件内容哈希),需额外添加逻辑
- 移动操作不可逆,建议先将
move /Y改为echo move /Y测试运行,确认结果无误后再执行真实移动
内容的提问来源于stack exchange,提问作者user28988882




