如何删除目录中重复和较小尺寸的文件

问题描述 投票:1回答:1

我在一个目录中有几百万个文件:

大小07kb-“ johnny.zip”

大小57kb-“ johnny(1).zip”

大小13kb-“ johnny(2).zip”

大小12kb-“ dhick.zip”

大小11kb-“ dhick(5).zip”

大小34kb-“ dhick(8).zip”


我只希望为找到的每个名称保留一个最大的文件。在这种情况下,消除所有其他较小且重复的对象:


大小07kb-“ johnny.zip” <<

size 57kb-“ johnny(1).zip” 不执行任何操作...

大小13kb-“ johnny(2).zip” <<

大小12kb-“ dick.zip” <<

大小11kb-“迪克(5).zip” <<

size 34kb-“迪克(8).zip” 不执行任何操作...


我该怎么办?

windows batch-file duplicates size
1个回答
1
投票
@echo off
setlocal

for %%A in (*.zip) do (
    for /f "eol=| delims=(" %%B in ("%%~nA") do (
        set "string=%%~B"
        call :trim

        for /f "skip=1 eol=| delims=" %%C in (
            'call dir /b /o-s "%%string%%*.zip"'
        ) do (
            del "%%~C"
        )
    )
)

exit /b

:trim
if "%string:~-1%" == " " set "string=%string:~0,-1%" & goto :trim
for /f "tokens=*" %%A in ("%string%") do set "string=%%~A"
exit /b 0

这是我将尝试完成任务的方式。由于只有几百万个文件,因此尝试通过排序等方式在内存中完成所有任务可能很困难。这样做的目的是迭代文件,获取基本名称(任何在右括号前的字符串)并追加*.zip以对文件进行排序,并删除较小的文件,而仅保留最大的文件。希望您没有太多的一个基本名称,即johnny

虽然我已经做了一些简单的测试,但是毫无疑问,这还没有被彻底证明。使用ren而不是del可能更安全,例如:ren "%%~C" "%%~nC.bak"。如果不正确,请使用ren *.bak *.zip撤消。如果正确del *.bak。对一小组复制的文件进行测试,以确保其可以正常工作。我说这是因为del无法撤消。

dir /b /o-s将按大小排序(最大1st),因此只需要skip 1并删除其余部分即可。 call用于扩展%%string%%,因此不使用延迟扩展。标签:trim删除字符串两端的空格(分隔后出现的,因此需要删除该空间,通配符搜索才能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.