![使用 Windows 批处理根据文件大小删除重复文件](https://linux22.com/image/1552264/%E4%BD%BF%E7%94%A8%20Windows%20%E6%89%B9%E5%A4%84%E7%90%86%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E5%88%A0%E9%99%A4%E9%87%8D%E5%A4%8D%E6%96%87%E4%BB%B6.png)
我在一个目录(带有子目录)中有一些文件,这些文件的名称相似,只是最后一位数字不同。我想保留文件大小最大的版本。但是有些文件没有任何重复,但我确实需要保留该文件。
文件看起来会像这样
111~1.mp4 (1mb)
111~2.mp4 (5mb)
111~3.mp4 (2mb)
222~1.mp4 (3mb)
333~1.mp4 (2mb)
333~2.mp4 (4mb)
444~1.mp4 (1mb)
444~2.mp4 (5mb)
444~3.mp4 (3mb)
444~4.mp4 (7mb)
我只想保留最大版本的尺寸。
111~2.mp4 (5mb)
222~1.mp4 (3mb)
333~2.mp4 (4mb)
444~4.mp4 (7mb)
恐怕我被难住了,我一直在搜索,但还没能成功,到目前为止我所做的就是能够获得文件的大小
set "filename=*.*"
for %%A in (%filename%) do echo.Size of "%%A" is %%~zA bytes
但现在我必须将重复项相互比较并删除较小尺寸的版本,只保留较大尺寸的版本,如果没有重复,则保留该版本。
答案1
这应该可以完成这项工作:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
REM **************************************************
REM Source directory
SET source=C:\adjust\path\to\folder
REM Set folder name
SET folder_name=folder
REM **************************************************
REM Creating a new directory to sort out files
IF NOT EXIST "%source% TEMP" MD "%source% TEMP"
REM Sorting out files without duplicates
FOR /F "tokens=1,* delims=~" %%A IN ('DIR /S/B/A-D "%source%"') DO (
IF NOT EXIST "%%~fA~2%%~xB" COPY "%%~fA~1%%~xB" "%source% TEMP\%%~nxA~1%%~xB" >nul 2>&1
)
REM Sorting out files with biggest size
FOR /F "tokens=1,* delims=~" %%F IN ('DIR /S/B/A-D "%source%"') DO (
SET path=%%~dpF
SET name_1=%%~nF~
FOR /F "delims=" %%A IN ('DIR "%%~fF*" /S/B/O:-S') DO (SET biggest=%%A && CALL :copy)
)
REM Deleting all duplicates
RD /S /Q "%source%"
REM Renaming TEMP to source
REN "%source% TEMP" "%folder_name%"
CLS
ECHO.
ECHO Done^^!
ECHO.
PAUSE
:copy
SET name_2=%biggest:*~=%
COPY "%biggest%" "%source% TEMP\%name_1%%name_2%" >nul 2>&1 && DEL "%path%%name_1%*" >nul 2>&1
EXIT /B
请记住:这将删除整个文件夹,然后相应地重命名临时文件夹。如果您有任何文件的名称中没有 ,~
那么这些文件将被删除!!!