在CMD中删除相同大小的文件



我想删除相同大小的文件并保留不同的文件,但是我的代码不能正常工作。我怎样才能解决这个问题?

@echo off
for /r %%i in (.*) do (
setlocal ENABLEDELAYEDEXPANSION
set /a count=0
set /a fsize=%%~zi
for /r %%j in (.*) do (
setlocal ENABLEDELAYEDEXPANSION
if %%~zj EQU !fsize!
set /a count=count+1
if !count! GTR 1
del %%j ))
endlocal
pause

有很多问题。在if之前的命令应该在同一行。你不能在for循环内做两个delayedexpansion而不以endlocal结束,因为膨胀会跑得太深。

所以在循环外只需要一个delayedexpansion。这里的主要问题是总是当第二个for再次开始递归搜索时,在第二个循环中计数为2或更多,每个文件将匹配自己,包括batch-file:

@echo off
setlocal enabledelayedexpansion
for /r %%i in (*) do (
if not "%%~i" == "%~f0" (
set "fsize=%%~zi"
for /r %%j in (*) do (
if !fsize! equ %%~zj if not "%%~j" == "%%~i" if exist "%%~i" del "%%~i"
)
)
)

你必须注意,然而,这将递归到子文件夹,因为for /R,所以如果一个文件存在于根目录6KB,作为一个例子,一个文件在子文件夹也有6KB的大小,它会删除根文件,并保留该文件在子文件夹。它将删除列表中除最后一个文件外的所有相同大小的文件。

相关内容

  • 没有找到相关文章

最新更新