ファイル名に日付 _yyyyMMdd を付けて、日付付きファイルを3世代だけ残す。
@echo off
setlocal enabledelayedexpansion
rem ================================
rem 設定
rem ================================
set "DIR=C:\work"
set "BASE_NAME=backup"
set "EXT=.txt"
set "NEWFILE=C:\work\new_backup.txt"
rem 今日の日付を yyyyMMdd で取得
for /f %%A in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd"') do set "TODAY=%%A"
rem 作成するファイル名
set "TARGET=%DIR%\%BASE_NAME%_%TODAY%%EXT%"
rem ================================
rem 新しいファイルを日付付きでコピー
rem ================================
if not exist "%NEWFILE%" (
echo エラー: 新しいファイルが存在しません。
echo %NEWFILE%
pause
exit /b 1
)
copy /Y "%NEWFILE%" "%TARGET%"
if errorlevel 1 (
echo エラー: ファイルコピーに失敗しました。
pause
exit /b 1
)
echo 作成しました: %TARGET%
rem ================================
rem 3世代を超えた古いファイルを削除
rem ================================
set "COUNT=0"
for /f "delims=" %%F in ('dir /b /a-d /o-n "%DIR%\%BASE_NAME%_*%EXT%"') do (
set /a COUNT+=1
if !COUNT! GTR 3 (
echo 削除します: %DIR%\%%F
del "%DIR%\%%F"
)
)
echo 3世代管理が完了しました。
pause
endlocal