@echo off
goto :startit
@REM/ 原作者:james168
@REM/ 摘自:
http://www.cn-dos.net/forum/viewthread.php?tid=33605&pid=246736&page=1&sid=F9NUPA#pid246736 7楼
@REM/
@REM/ 修改者:honghunter
www.dps4e.com
@REM/ 作用:将%src_dir%中的内容复制/备份到%tar_dir%.
@REM/ 最多保留30个备份,超过30的时候,删除最早的备份。
@REM/ 备份目录名称为备份时的日期
@REM/ 注意:如果某天备份不止一次,从第二次开始,目录名称上面将增加序号。
@REM/
@REM/ honghunter 在 winXP+SP2的CMD下测试通过。
@REM/
:startit
set CCDIR=%~dp0
set CCDIR=%CCDIR:~0,-1%
set src_dir=%USERPROFILE%\Favorites
set tar_dir=B:\JatDomeR5
title delete old folder when great 30
set target_dir=%tar_dir%\%DATE%\
set /a fix_dir=0
@REM/ 如果当天备份过,目录名称上面增加序号。
:get_target_dir
set /a fix_dir=%fix_dir%+1
if exist "%target_dir%\." set target_dir=%tar_dir%\%DATE%_%fix_dir%\
if exist "%target_dir%\." goto :get_target_dir
echo --------- Backup ---------
echo From : %src_dir%
echo To : %target_dir%
echo --------------------------
xcopy /s /q "%src_dir%\*.*" %target_dir%
@REM/goto :eof
for /f "skip=5 tokens=1,2 delims= " %%a in ('dir /ad /ogd %tar_dir%') do (
if "%%b"=="个目录" set TOTAL=%%a
)
if %TOTAL% leq 32 goto notdel
set /a GRT=%TOTAL%-32
set NUM=0
for /f "tokens=1 delims= " %%j in ('dir /ad /ogd /b %tar_dir%') do (call :dd1 "%%j")
GOTO end
:notdel
echo.
echo Folder less than 30
goto end
:end
echo Press any key exit
@REM/pause>nul
@REM/exit
:dd1
set /a NUM+=1
if "%1"=="" goto :eof
if "%1"==" " goto :eof
if %NUM% leq %GRT% (rd /q /s %tar_dir%\%1)
goto :eof