batch-file - 删除目录中的重复文件
问题描述
我有一个工作脚本(如下),它仅按大小比较文件,如果一个或多个文件的大小不同,它会显示在.bat
屏幕上。
@echo off
setlocal EnableDelayedExpansion
rem Group all file names by size
for /R %%a in (*.*) do (
set "size[%%~Za]=!size[%%~Za]!,%%~Fa"
)
rem Show groups that have more than one element
for /F "tokens=2,3* delims=[]=," %%a in ('set size[') do (
if "%%c" neq "" echo [%%a]: %%b,%%c
)
pause
但我需要更多!
我还需要脚本删除重复文件,只保留一个。例如,如果存在3
大小相同但名称不同的文件,则脚本应选择保留一个,删除另一个2
。
@LotPings,我尝试了 2 个 .pdf 文件,并在下图中出现了这条消息:
@LotPings
现在它认得很好!但它不会删除重复项,只是识别....看下图:
解决方案
- 我认为将具有相同大小的文件视为相同的内容有点幼稚。
如果有疑问,最好与 fc 进行二进制比较。 %%~Fa
您在不引用可能包含空格的每个名称的情况下填充字符串的方式可能会在进一步处理中出现问题。- 如果文件相同,您可以创建链接。
- 你知道这
for /r
会递归到子目录吗?
以下批处理将以size[]
不同的方式处理数组,将大小和内容传递给保留第一个文件和(仅回显)del 命令的子例程。
:: Q:\Test\2018\06\06\SO_50723488.cmd
@echo off & setlocal
rem Group all file names by size
for /R %%a in (*.*) do call set size[%%~Za]=%%size[%%~Za]%%,"%%~Fa"
rem Process groups
for /F "tokens=2* delims=[]=," %%a in ('set size[') do Call :Sub %%a %%b
pause
Goto :Eof
:Sub
If "%~3"=="" (Set "size[%1]="&goto :EOf)
Echo ========================================
Echo processing %*
Echo Keep %2
Shift&shift
:loop
Echo Del %1
if not "%~2"=="" (shift&goto :loop)
样本输出:
> Q:\Test\2018\06\06\SO_50723488.cmd
========================================
processing 0 "Q:\Test\2018\05\03\Text3.txt","Q:\Test\2018\05\27\log.html"
Keep "Q:\Test\2018\05\03\Text3.txt"
Del "Q:\Test\2018\05\27\log.html"
========================================
processing 14 "Q:\Test\2018\05\03\Text1.txt","Q:\Test\2018\05\15\HP-G1610-20180515.json"
Keep "Q:\Test\2018\05\03\Text1.txt"
Del "Q:\Test\2018\05\15\HP-G1610-20180515.json"
========================================
processing 21 "Q:\Test\2018\05\12\text1.txt","Q:\Test\2018\05\12\text2.txt"
Keep "Q:\Test\2018\05\12\text1.txt"
Del "Q:\Test\2018\05\12\text2.txt"
========================================
processing 22 "Q:\Test\2018\05\20\2.txt","Q:\Test\2018\05\22\version.ps1"
Keep "Q:\Test\2018\05\20\2.txt"
Del "Q:\Test\2018\05\22\version.ps1"
========================================
processing 288 "Q:\Test\2018\05\11\RawData.txt","Q:\Test\2018\05\23\SO_50478080.ps1"
Keep "Q:\Test\2018\05\11\RawData.txt"
Del "Q:\Test\2018\05\23\SO_50478080.ps1"
推荐阅读
- php - 如何在类中启动自定义会话功能
- python - Pandas 按多列分组并执行计算
- python - 在 Python 中指定参数类型和返回值
- python - Python:如果字符串 1 包含在字符串 2 中,我如何检查两个具有重复字母的字符串?
- performance - 使用多个用户凭据和表单填写的 Jmeter 负载测试
- python - Numpy 2d 数组,获取指定列索引等于 1 的行的索引
- jquery - 如何在 jQuery mouseover 中调用 Angular 方法?
- c# - 如何在片段 Xamarin Android Native 中使用 SQLite 在 Recycler View Card View 中显示数据
- c++ - 查找数字是否为 2 的幂的时间复杂度
- html - 更改 HTML / CSS 中导航链接之间的间距