
Ich habe eine Reihe von Dateien in einem Verzeichnis (mit Unterverzeichnissen) mit ähnlichen Namen, nur dass die letzte Ziffer eine andere Zahl ist. Ich möchte die Version mit der größten Dateigröße behalten. Einige Dateien haben zwar keine Duplikate, aber ich muss diese Datei behalten.
Dateien werden aussehen
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)
Ich möchte nur die größte Versionsgröße behalten.
111~2.mp4 (5mb)
222~1.mp4 (3mb)
333~2.mp4 (4mb)
444~4.mp4 (7mb)
Ich fürchte, ich bin ratlos, ich habe gesucht, aber es nicht geschafft, es zum Laufen zu bringen, was ich bisher getan habe, ist, die Größe der Dateien zu ermitteln
set "filename=*.*"
for %%A in (%filename%) do echo.Size of "%%A" is %%~zA bytes
aber jetzt muss ich die Duplikate miteinander vergleichen und die kleinere Version löschen und nur die größere Version behalten und wenn es keine Duplikate gibt, dann diese Version behalten.
Antwort1
Das hier sollte funktionieren:
@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
Bedenken:Dadurch wird der gesamte Ordner gelöscht und der temporäre Ordner entsprechend umbenannt. Wenn Sie Dateien haben, die kein ~
im Namen haben, werden diese Dateien gelöscht!!!