You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用.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

火山引擎 最新活动