CMD删除相同大小的文件

Delete files the same size in 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 循环中执行两个 delayedexpansions 而不是以 endlocal 结束它们,因为扩展会 运行 太深。

所以你只需要一个 delayedexpansion 在循环外。这里的主要问题是你将 always 在第二个循环中计数为 2 或更多,因为第二个 for 再次开始递归搜索并且每个文件将匹配自身,包括 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 的大小将它删除根文件并将文件保留在子文件夹中。它将删除除列表中最后一个大小相同的所有文件。