用批处理命令实现新建一个当天日期为命名的文件夹,同时将文件备份到该文件夹下,再删除五天之前备份文件

举例:
要备份的目标文件路径:D:\Prod\datebase,
备份到:E:\Prodbak,
目的
备份的文件夹以当天的日期为文件夹名,如今天则在E:\Prodbak产生一个2013-07-11的文件夹名。
将D:\Prod\datebase下的文件备份到E:\Prodbak\......
删除五天以前备份文件夹。
请教如何用批处理来实现。最好简单并附带解释。谢谢!

@echo off
rem 下两句设置源文件路径及目标文件路径
set "src=D:\Prod\datebase"
set "dst=E:\Prodbak"
rem 复制源文件至目标目录,自动创建当前日期目录。
xcopy "%src%\*.*" "%dst%\%date:~,4%-%date:~5,2%-%date:~8,2%\" /ryhs
rem 利用/o-n参数从大到小排列,删除第5个以后的目录(这里取巧用法,但是简单高效)
rem 如果不合适,请追问。
for /f "skip=5 delims=" %%a in ('dir /b/ad/o-n "%dst%\????-??-??"') do (
    rd /s/q "%%a"
)

追问

谢谢,现在以日期命名及备份都可以,但删除五天以前的数据,他会提示

“找不到系统文件”

我是XP SP3系统

追答

原来你没有每天备份啊,上面脚本是保留最新的5个,rd /s/q "%%a"改为rd /s/q "%dst%\%%a"

如果要删除2013-07-07之前的则要计算了。

@echo off
set "src=D:\Prod\datebase"
set "dst=E:\Prodbak"
xcopy "%src%\*.*" "%dst%\%date:~,4%-%date:~5,2%-%date:~8,2%\" /ryhs
for /f "tokens=1-3 delims=/- " %%a in ("%date%")do set/a y=%%a,m=1%%b%%100,d=1%%c%%100,"m=(m+9)%%12,y-=m/10+1900,i=365*y+y/4+(m*153+2)/5+d-1"
for /f "delims=" %%i in ('dir /b/ad/o-n "%dst%\????-??-??"') do (
    setlocal enabledelayedexpansion
    for /f "tokens=1-3 delims=/- " %%a in ("%%i")do set/a y=%%a,m=1%%b%%100,d=1%%c%%100,"m=(m+9)%%12,y-=m/10+1900,i-=365*y+y/4+(m*153+2)/5+d-1"
    if !i! gtr 5 rd /s/q "%dst%\%%i"
    endlocal
)

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网