Windows 배치를 사용하여 파일 크기를 기준으로 중복 파일 삭제

Windows 배치를 사용하여 파일 크기를 기준으로 중복 파일 삭제

마지막 숫자가 다른 숫자라는 점을 제외하고 비슷한 이름을 가진 디렉터리(하위 디렉터리 포함)에 여러 개의 파일이 있습니다. 파일 크기가 가장 큰 버전을 유지하고 싶습니다. 그러나 일부 파일에는 중복 항목이 없지만 해당 파일을 보관해야 합니다.

파일은 다음과 같습니다

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

기억 해둬:그러면 전체 폴더가 삭제되고 이에 따라 임시 폴더의 이름이 변경됩니다. 이름에 가 없는 파일이 있으면 ~해당 파일은 삭제됩니다!!!

관련 정보