Xóa các tệp trùng lặp dựa trên kích thước tệp với hàng loạt


3

Tôi có một loạt các tệp trong một thư mục (có thư mục con) có tên tương tự ngoại trừ chữ số cuối cùng là một số khác. Tôi muốn giữ phiên bản có kích thước tệp lớn nhất. Tuy nhiên một số tệp sẽ không có bất kỳ bản sao nào nhưng tôi cần phải giữ tệp đó.

các tập tin sẽ trông như

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)

Tôi chỉ muốn giữ kích thước phiên bản lớn nhất.

111~2.mp4    (5mb)

222~1.mp4    (3mb)

333~2.mp4    (4mb)

444~4.mp4    (7mb)

Tôi sợ rằng tôi đã bị bối rối, tôi đã tìm kiếm nhưng không thể làm cho nó đi theo những gì tôi đã làm cho đến nay là có thể có được kích thước của các tập tin

set "filename=*.*"
for %%A in (%filename%) do echo.Size of "%%A" is %%~zA bytes

nhưng bây giờ tôi phải so sánh các bản sao với nhau và xóa phiên bản kích thước nhỏ hơn và chỉ giữ phiên bản kích thước lớn hơn và nếu chúng không trùng lặp thì giữ phiên bản đó.

Câu trả lời:


3

Điều này sẽ làm công việc:

@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

Đầu óc trống rỗng: điều này sẽ xóa toàn bộ thư mục và sau đó đổi tên thư mục tạm thời. Nếu bạn có bất kỳ tập tin nào không có ~ trong tên của họ sau đó những tập tin sẽ bị xóa !!!


@JuanLopez Vui mừng tôi có thể giúp! :)
FatalBulletHit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.