
마지막 숫자가 다른 숫자라는 점을 제외하고 비슷한 이름을 가진 디렉터리(하위 디렉터리 포함)에 여러 개의 파일이 있습니다. 파일 크기가 가장 큰 버전을 유지하고 싶습니다. 그러나 일부 파일에는 중복 항목이 없지만 해당 파일을 보관해야 합니다.
파일은 다음과 같습니다
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
기억 해둬:그러면 전체 폴더가 삭제되고 이에 따라 임시 폴더의 이름이 변경됩니다. 이름에 가 없는 파일이 있으면 ~
해당 파일은 삭제됩니다!!!