質問: 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 しかし今、私は重複を互いに比較し、小さいサイズのバージョンを削除し、大きいサイズのバージョンのみを保持し、それらが重複していない場合はそのバージョンを保持する必要があります。
回答: これでうまくいくはずです:@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 注意:これにより、フォルダ全体が削除され、それに応じて一時フォルダの名前が変更されます。名前に~が含まれていないファイルがある場合、それらのファイルは削除されます!!!